]> git.proxmox.com Git - mirror_ubuntu-focal-kernel.git/blobdiff - scripts/recordmcount.c
netfilter: nf_tables: add nft_set_elem_expr_alloc()
[mirror_ubuntu-focal-kernel.git] / scripts / recordmcount.c
index 612268eabef463e783a75bd61252ef6c6e122496..cce12e1971d853353e6eed3eec83deeb07ad9348 100644 (file)
 #define R_AARCH64_ABS64        257
 #endif
 
+#define R_ARM_PC24             1
+#define R_ARM_THM_CALL         10
+#define R_ARM_CALL             28
+
+#define R_AARCH64_CALL26       283
+
 static int fd_map;     /* File descriptor for file being modified. */
 static int mmap_failed; /* Boolean flag. */
 static char gpfx;      /* prefix for global symbol name (sometimes '_') */
@@ -418,6 +424,23 @@ static char const *already_has_rel_mcount = "success"; /* our work here is done!
 #define RECORD_MCOUNT_64
 #include "recordmcount.h"
 
+static int arm_is_fake_mcount(Elf32_Rel const *rp)
+{
+       switch (ELF32_R_TYPE(w(rp->r_info))) {
+       case R_ARM_THM_CALL:
+       case R_ARM_CALL:
+       case R_ARM_PC24:
+               return 0;
+       }
+
+       return 1;
+}
+
+static int arm64_is_fake_mcount(Elf64_Rel const *rp)
+{
+       return ELF64_R_TYPE(w8(rp->r_info)) != R_AARCH64_CALL26;
+}
+
 /* 64-bit EM_MIPS has weird ELF64_Rela.r_info.
  * http://techpubs.sgi.com/library/manuals/4000/007-4658-001/pdf/007-4658-001.pdf
  * We interpret Table 29 Relocation Operation (Elf64_Rel, Elf64_Rela) [p.40]
@@ -523,6 +546,7 @@ static int do_file(char const *const fname)
                altmcount = "__gnu_mcount_nc";
                make_nop = make_nop_arm;
                rel_type_nop = R_ARM_NONE;
+               is_fake_mcount32 = arm_is_fake_mcount;
                gpfx = 0;
                break;
        case EM_AARCH64:
@@ -530,6 +554,7 @@ static int do_file(char const *const fname)
                make_nop = make_nop_arm64;
                rel_type_nop = R_AARCH64_NONE;
                ideal_nop = ideal_nop4_arm64;
+               is_fake_mcount64 = arm64_is_fake_mcount;
                break;
        case EM_IA_64:  reltype = R_IA64_IMM64; break;
        case EM_MIPS:   /* reltype: e_class    */ break;