RISC-V: Fix _sbrk, it's failed only when return value is -1.
Signed-off-by: Kito Cheng <kito.cheng@gmail.com>
This commit is contained in:
		
				
					committed by
					
						 Corinna Vinschen
						Corinna Vinschen
					
				
			
			
				
	
			
			
			
						parent
						
							258996b696
						
					
				
				
					commit
					9e032fd939
				
			| @@ -40,13 +40,18 @@ __internal_syscall(long n, long _a0, long _a1, long _a2, long _a3, long _a4, lon | |||||||
|   asm volatile ("scall" |   asm volatile ("scall" | ||||||
| 		: "+r"(a0) : "r"(a1), "r"(a2), "r"(a3), "r"(a4), "r"(a5), "r"(syscall_id)); | 		: "+r"(a0) : "r"(a1), "r"(a2), "r"(a3), "r"(a4), "r"(a5), "r"(syscall_id)); | ||||||
|  |  | ||||||
|  |   return a0; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | static inline long | ||||||
|  | syscall_errno(long n, long _a0, long _a1, long _a2, long _a3, long _a4, long _a5) | ||||||
|  | { | ||||||
|  |   long a0 = __internal_syscall (n, _a0, _a1, _a2, _a3, _a4, _a5); | ||||||
|  |  | ||||||
|   if (a0 < 0) |   if (a0 < 0) | ||||||
|     return __syscall_error (a0); |     return __syscall_error (a0); | ||||||
|   else |   else | ||||||
|     return a0; |     return a0; | ||||||
| } | } | ||||||
|  |  | ||||||
| #define syscall_errno(n, a, b, c, d, e, f) \ |  | ||||||
|         __internal_syscall(n, (long)(a), (long)(b), (long)(c), (long)(d), (long)(e), (long)(f)) |  | ||||||
|  |  | ||||||
| #endif | #endif | ||||||
|   | |||||||
| @@ -41,14 +41,14 @@ _sbrk(ptrdiff_t incr) | |||||||
|  |  | ||||||
|   if (heap_end == 0) |   if (heap_end == 0) | ||||||
|     { |     { | ||||||
|       long brk = syscall_errno (SYS_brk, 0, 0, 0, 0, 0, 0); |       long brk = __internal_syscall (SYS_brk, 0, 0, 0, 0, 0, 0); | ||||||
|       if (brk == -1) |       if (brk == -1) | ||||||
| 	return (void *)-1; |         return (void *)__syscall_error (-ENOMEM); | ||||||
|       heap_end = brk; |       heap_end = brk; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|   if (syscall_errno (SYS_brk, heap_end + incr, 0, 0, 0, 0, 0) != heap_end + incr) |   if (__internal_syscall (SYS_brk, heap_end + incr, 0, 0, 0, 0, 0) != heap_end + incr) | ||||||
|     return (void *)-1; |     return (void *)__syscall_error (-ENOMEM); | ||||||
|  |  | ||||||
|   heap_end += incr; |   heap_end += incr; | ||||||
|   return (void *)(heap_end - incr); |   return (void *)(heap_end - incr); | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user