drivers: power: report battery voltage in AOSP compatible format
[GitHub/mt8127/android_kernel_alcatel_ttab.git] / scripts / recordmcount.c
index 9c22317778eb7e3f995c73845cfcceba15062739..8c9ffe27a08366911ea87ff31c2538631c227a3d 100644 (file)
 #include <string.h>
 #include <unistd.h>
 
+/*
+ * glibc synced up and added the metag number but didn't add the relocations.
+ * Work around this in a crude manner for now.
+ */
 #ifndef EM_METAG
-/* Remove this when these make it to the standard system elf.h. */
 #define EM_METAG      174
+#endif
+#ifndef R_METAG_ADDR32
 #define R_METAG_ADDR32                   2
+#endif
+#ifndef R_METAG_NONE
 #define R_METAG_NONE                     3
 #endif
 
+#ifndef EM_AARCH64
+#define EM_AARCH64     183
+#define R_AARCH64_ABS64        257
+#endif
+
 static int fd_map;     /* File descriptor for file being modified. */
 static int mmap_failed; /* Boolean flag. */
 static void *ehdr_curr; /* current ElfXX_Ehdr *  for resource cleanup */
@@ -189,6 +201,20 @@ static void *mmap_file(char const *fname)
                addr = umalloc(sb.st_size);
                uread(fd_map, addr, sb.st_size);
        }
+       if (sb.st_nlink != 1) {
+               /* file is hard-linked, break the hard link */
+               close(fd_map);
+               if (unlink(fname) < 0) {
+                       perror(fname);
+                       fail_file();
+               }
+               fd_map = open(fname, O_RDWR | O_CREAT, sb.st_mode);
+               if (fd_map < 0) {
+                       perror(fname);
+                       fail_file();
+               }
+               uwrite(fd_map, addr, sb.st_size);
+       }
        return addr;
 }
 
@@ -347,6 +373,8 @@ do_file(char const *const fname)
        case EM_ARM:     reltype = R_ARM_ABS32;
                         altmcount = "__gnu_mcount_nc";
                         break;
+       case EM_AARCH64:
+                        reltype = R_AARCH64_ABS64; gpfx = '_'; break;
        case EM_IA_64:   reltype = R_IA64_IMM64;   gpfx = '_'; break;
        case EM_METAG:   reltype = R_METAG_ADDR32;
                         altmcount = "_mcount_wrapper";