OSDN Git Service

Fix x86 dynamic linker build.
authorElliott Hughes <enh@google.com>
Wed, 19 Dec 2012 02:13:19 +0000 (18:13 -0800)
committerElliott Hughes <enh@google.com>
Wed, 19 Dec 2012 02:13:19 +0000 (18:13 -0800)
Change-Id: Ia9fc6342e3d409de86dcd187c7402e8ac2ae96c8

linker/arch/x86/begin.c
linker/linker_format.cpp

index 2ca15c4..4f3e0ab 100755 (executable)
  * SUCH DAMAGE.
  */
 
+#include <stdint.h>
+
 extern unsigned __linker_init(unsigned int *elfdata);
 
 __attribute__((visibility("hidden")))
 void _start() {
-  void *elfdata;
   void (*start)(void);
 
-  elfdata = __builtin_frame_address(0) + sizeof(void *);
+  void* elfdata = (void*) ((uintptr_t) __builtin_frame_address(0) + sizeof(void*));
   start = (void(*)(void))__linker_init(elfdata);
 
   /* linker init returns (%eax) the _entry address in the main image */
index 65c6264..c56d8a1 100644 (file)
@@ -371,14 +371,14 @@ format_number(char *buffer, size_t bufsize, uint64_t value, int base, const char
     while (value) {
         unsigned d = value % base;
         value /= base;
-        if (pos < end) {
+        if (pos != end) {
             *pos++ = digits[d];
         }
     }
 
     /* special case for 0 */
     if (pos == buffer) {
-        if (pos < end) {
+        if (pos != end) {
             *pos++ = '0';
         }
     }
@@ -387,7 +387,7 @@ format_number(char *buffer, size_t bufsize, uint64_t value, int base, const char
     /* now reverse digit string in-place */
     end = pos - 1;
     pos = buffer;
-    while (pos < end) {
+    while (pos != end) {
         int ch = pos[0];
         pos[0] = end[0];
         end[0] = (char) ch;