Score:0

Kernel make generates "ld: arch/x86/entry/syscall_64.o:(.rodata+0xdc0): undefined reference to `__x64_sys_s_enable'"

hu flag

OS is Ubuntu 20.10 Kernel Source is linux_5.8.0-59.66

I am porting kernel modifications from Centos 7 Rhel 7.9 to Ubuntu.

The original unmodified Ubuntu kernel source compiles and runs cleanly on this machine. The compiler set up seems to be functioning properly.

My current problem is related to a system call I've added. The error generated is -

LD      .tmp_vmlinux.btf
ld: arch/x86/entry/syscall_64.o:(.rodata+0xdc0): undefined reference to `__x64_sys_s_enable'
BTF     .btf.vmlinux.bin.o    
Segmentation fault (core dumped)
LD      .tmp_vmlinux.kallsyms1
.btf.vmlinux.bin.o: file not recognized: file format not recognized
make: *** [Makefile:1163: vmlinux] Error 1

I have searched and googled this original error "undefined reference", found possible fixes which have not worked.

Here are the steps I used to add the system call, which originally worked on Centos 7 and RHEL 7.9.

Modified /SOURCE-DIRECTORY/include/linux/syscalls.h commentng out the original line and adding the reference to __64 (including a blank line above it)-

asmlinkage long __64_sys_s_enable(int s_enable_flag);
//asmlinkage long sys_s_enable(int s_enable_flag);

Modified /SOURCE-DIRECTORY/arch/x86/include/asm/syscalls.h adding -

# SYSCALL ADDITION
440     64      s_enable        sys_s_enable

The fields are delimited by TAB, and I did not add any blank lines.

Created the source directory and files - /SOURCE-DIRECTORY/s_enable containing s_enable.c. s_enable.c in it's entirety is

#include <linux/kernel.h>
extern int s_enable_flag;

asmlinkage long sys_s_enable(int i)
{
//       printk(KERN_INFO "In ORIGINAL SYSCALL s_enable\n");
         s_enable_flag = i;
         return 0;
}

And added the appropriate syscall directory to the Makefile.

core-y          += kernel/ certs/ mm/ fs/ ipc/ security/ crypto/ block/ s_enable/

And ran "sudo make".

I'm not sure what I might be doing wrong in that the "make" works with the original kernel source, and the system call I am trying to add has worked on the other mentioned distros.

Thanks for any input you can provide.

mangohost

Post an answer

Most people don’t grasp that asking a lot of questions unlocks learning and improves interpersonal bonding. In Alison’s studies, for example, though people could accurately recall how many questions had been asked in their conversations, they didn’t intuit the link between questions and liking. Across four studies, in which participants were engaged in conversations themselves or read transcripts of others’ conversations, people tended not to realize that question asking would influence—or had influenced—the level of amity between the conversationalists.