Module Name: src Committed By: ryo Date: Fri Oct 14 19:41:18 UTC 2022
Modified Files: src/share/examples/asm/hello: Makefile Added Files: src/share/examples/asm/hello: aarch64.s arm.s i386.s sh3.s x86_64.s Log Message: add more examples To generate a diff of this commit: cvs rdiff -u -r1.1 -r1.2 src/share/examples/asm/hello/Makefile cvs rdiff -u -r0 -r1.1 src/share/examples/asm/hello/aarch64.s \ src/share/examples/asm/hello/arm.s src/share/examples/asm/hello/i386.s \ src/share/examples/asm/hello/sh3.s src/share/examples/asm/hello/x86_64.s Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/share/examples/asm/hello/Makefile diff -u src/share/examples/asm/hello/Makefile:1.1 src/share/examples/asm/hello/Makefile:1.2 --- src/share/examples/asm/hello/Makefile:1.1 Sat Nov 12 01:18:41 2011 +++ src/share/examples/asm/hello/Makefile Fri Oct 14 19:41:18 2022 @@ -1,9 +1,9 @@ -# $NetBSD: Makefile,v 1.1 2011/11/12 01:18:41 jmmv Exp $ +# $NetBSD: Makefile,v 1.2 2022/10/14 19:41:18 ryo Exp $ .include <bsd.own.mk> .if ${MKSHARE} != "no" -FILES= Makefile.inst powerpc.s +FILES= Makefile.inst aarch64.s arm.s i386.s powerpc.s sh3.s x86_64.s FILESDIR= /usr/share/examples/asm/hello FILESNAME_Makefile.inst= Makefile .endif Added files: Index: src/share/examples/asm/hello/aarch64.s diff -u /dev/null src/share/examples/asm/hello/aarch64.s:1.1 --- /dev/null Fri Oct 14 19:41:18 2022 +++ src/share/examples/asm/hello/aarch64.s Fri Oct 14 19:41:18 2022 @@ -0,0 +1,84 @@ +/* $NetBSD: aarch64.s,v 1.1 2022/10/14 19:41:18 ryo Exp $ */ + +/*- + * Copyright (c) 2022 The NetBSD Foundation, Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED + * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS + * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ + +/* + * assemble & link: + * as -o aarch64.o aarch64.s + * ld -o hello -e _start aarch64.o + */ + + /* ------------------------------------------------------------------ */ + + /* + * This ELF section is used by the kernel to determine, among other + * things, the system call interface used by the binary. + * + * Normally, /usr/lib/crti.o is linked, but here it is written manually. + * + * SEE ALSO: + * - http://www.netbsd.org/docs/kernel/elf-notes.html + * - src/sys/sys/exec_elf.h + * - src/lib/csu/common/sysident.S + * - src/lib/csu/arch/aarch64/crti.S + */ + .section ".note.netbsd.ident", "a" + .p2align 2 + .long 7 /* ELF_NOTE_NETBSD_NAMESZ */ + .long 4 /* ELF_NOTE_NETBSD_DESCSZ */ + .long 1 /* ELF_NOTE_TYPE_NETBSD_TAG */ + .ascii "NetBSD\0\0" /* ELF_NOTE_NETBSD_NAME */ + .long 999010000 /* __NetBSD_Version__ (sys/sys/param.h) */ + + + /* ------------------------------------------------------------------ */ + + .section ".rodata" +message: + .ascii "Hello, world!\n" + .set MESSAGE_SIZE, . - message + + + /* ------------------------------------------------------------------ */ + + .section ".text" + .p2align 2 + + .global _start + .type _start, %function +_start: + /* write(STDOUT_FILENO, message, MESSAGE_SIZE) */ + mov x0, #1 /* x0: fd = STDOUT_FILENO */ + adr x1, message /* x1: buf = message */ + mov x2, #MESSAGE_SIZE /* x2: nbytes = MESSAGE_SIZE */ + svc #4 /* SYS_write */ + + /* exit(0) */ + mov x0, #0 /* x0: status = 0 */ + svc #1 /* SYS_exit */ + + .size _start, . - _start Index: src/share/examples/asm/hello/arm.s diff -u /dev/null src/share/examples/asm/hello/arm.s:1.1 --- /dev/null Fri Oct 14 19:41:18 2022 +++ src/share/examples/asm/hello/arm.s Fri Oct 14 19:41:18 2022 @@ -0,0 +1,88 @@ +/* $NetBSD: arm.s,v 1.1 2022/10/14 19:41:18 ryo Exp $ */ + +/*- + * Copyright (c) 2022 The NetBSD Foundation, Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED + * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS + * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ + +/* + * assemble & link: + * as -o arm.o arm.s + * ld -o hello -e _start arm.o + */ + + /* ------------------------------------------------------------------ */ + + /* + * This ELF section is used by the kernel to determine, among other + * things, the system call interface used by the binary. + * + * Normally, /usr/lib/crti.o is linked, but here it is written manually. + * + * SEE ALSO: + * - http://www.netbsd.org/docs/kernel/elf-notes.html + * - src/sys/sys/exec_elf.h + * - src/lib/csu/common/sysident.S + * - src/lib/csu/arch/arm/crti.S + */ + .section ".note.netbsd.ident", "a" + .p2align 2 + .long 7 /* ELF_NOTE_NETBSD_NAMESZ */ + .long 4 /* ELF_NOTE_NETBSD_DESCSZ */ + .long 1 /* ELF_NOTE_TYPE_NETBSD_TAG */ + .ascii "NetBSD\0\0" /* ELF_NOTE_NETBSD_NAME */ + .long 999010000 /* __NetBSD_Version__ (sys/sys/param.h) */ + + + /* ------------------------------------------------------------------ */ + + .section ".rodata" +message: + .ascii "Hello, world!\n" + .set MESSAGE_SIZE, . - message + + + /* ------------------------------------------------------------------ */ + + .section ".text" + .p2align 2 + + .global _start + .type _start, %function +_start: + /* write(STDOUT_FILENO, message, MESSAGE_SIZE) */ + mov r0, #1 /* r0: fd = STDOUT_FILENO */ + ldr r1, .Lmessage /* r1: buf = message */ + mov r2, #MESSAGE_SIZE /* r2: nbytes = MESSAGE_SIZE */ + svc #(0xa00000 | 4) /* SYS_write */ + + /* exit(0) */ + mov r0, #0 /* r0: status = 0 */ + svc #(0xa00000 | 1) /* SYS_exit */ + + .p2align 2 +.Lmessage: + .word message + + .size _start, . - _start Index: src/share/examples/asm/hello/i386.s diff -u /dev/null src/share/examples/asm/hello/i386.s:1.1 --- /dev/null Fri Oct 14 19:41:18 2022 +++ src/share/examples/asm/hello/i386.s Fri Oct 14 19:41:18 2022 @@ -0,0 +1,89 @@ +/* $NetBSD: i386.s,v 1.1 2022/10/14 19:41:18 ryo Exp $ */ + +/*- + * Copyright (c) 2022 The NetBSD Foundation, Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED + * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS + * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ + +/* + * assemble & link: + * as -o i386.o i386.s + * ld -o hello -e _start i386.o + */ + + /* ------------------------------------------------------------------ */ + + /* + * This ELF section is used by the kernel to determine, among other + * things, the system call interface used by the binary. + * + * Normally, /usr/lib/crti.o is linked, but here it is written manually. + * + * SEE ALSO: + * - http://www.netbsd.org/docs/kernel/elf-notes.html + * - src/sys/sys/exec_elf.h + * - src/lib/csu/common/sysident.S + * - src/lib/csu/arch/i386/crti.S + */ + .section ".note.netbsd.ident", "a" + .p2align 2 + .long 7 /* ELF_NOTE_NETBSD_NAMESZ */ + .long 4 /* ELF_NOTE_NETBSD_DESCSZ */ + .long 1 /* ELF_NOTE_TYPE_NETBSD_TAG */ + .ascii "NetBSD\0\0" /* ELF_NOTE_NETBSD_NAME */ + .long 999010000 /* __NetBSD_Version__ (sys/sys/param.h) */ + + + /* ------------------------------------------------------------------ */ + + .section ".rodata" +message: + .ascii "Hello, world!\n" + .set MESSAGE_SIZE, . - message + + + /* ------------------------------------------------------------------ */ + + .section ".text" + .p2align 2 + + .global _start + .type _start, %function +_start: + /* write(STDOUT_FILENO, message, MESSAGE_SIZE) */ + pushl $MESSAGE_SIZE /* sp[12]: nbytes = MESSAGE_SIZE */ + pushl $message /* sp[8]: buf = message */ + pushl $1 /* sp[4]: fd = STDOUT_FILENO */ + pushl $0 /* sp[0] is return address (dummy) */ + mov $4, %eax /* SYS_write */ + int $0x80 + add $16, %esp + + /* exit(0) */ + pushl $0 /* sp[4]: status = 0 */ + pushl $0 /* sp[0] is return address (dummy) */ + mov $1, %eax /* SYS_exit */ + int $0x80 + + .size _start, . - _start Index: src/share/examples/asm/hello/sh3.s diff -u /dev/null src/share/examples/asm/hello/sh3.s:1.1 --- /dev/null Fri Oct 14 19:41:18 2022 +++ src/share/examples/asm/hello/sh3.s Fri Oct 14 19:41:18 2022 @@ -0,0 +1,90 @@ +/* $NetBSD: sh3.s,v 1.1 2022/10/14 19:41:18 ryo Exp $ */ + +/*- + * Copyright (c) 2022 The NetBSD Foundation, Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED + * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS + * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ + +/* + * assemble & link: + * as -o sh3.o sh3.s + * ld -o hello -e __start sh3.o + */ + + /* ------------------------------------------------------------------ */ + + /* + * This ELF section is used by the kernel to determine, among other + * things, the system call interface used by the binary. + * + * Normally, /usr/lib/crti.o is linked, but here it is written manually. + * + * SEE ALSO: + * - http://www.netbsd.org/docs/kernel/elf-notes.html + * - src/sys/sys/exec_elf.h + * - src/lib/csu/common/sysident.S + * - src/lib/csu/arch/sh3/crti.S + */ + .section ".note.netbsd.ident", "a" + .p2align 2 + .long 7 /* ELF_NOTE_NETBSD_NAMESZ */ + .long 4 /* ELF_NOTE_NETBSD_DESCSZ */ + .long 1 /* ELF_NOTE_TYPE_NETBSD_TAG */ + .ascii "NetBSD\0\0" /* ELF_NOTE_NETBSD_NAME */ + .long 999010000 /* __NetBSD_Version__ (sys/sys/param.h) */ + + + /* ------------------------------------------------------------------ */ + + .section ".rodata" +message: + .ascii "Hello, world!\n" + .set MESSAGE_SIZE, . - message + + + /* ------------------------------------------------------------------ */ + + .section ".text" + .p2align 2 + + .global __start + .type _start, %function +__start: + /* write(STDOUT_FILENO, message, MESSAGE_SIZE) */ + mov #1, r4 /* r4: fd = STDOUT_FILENO */ + mov.l .Lmessage, r5 /* r5: buf = message */ + mov #MESSAGE_SIZE, r6 /* r6: nbytes = MESSAGE_SIZE */ + mov #4, r0 /* SYS_write */ + trapa #0x80 + + /* exit(0) */ + mov #0, r4 /* r4: status = 0 */ + mov #1, r0 /* SYS_exit */ + trapa #0x80 + + .p2align 2 +.Lmessage: + .long message + + .size __start, . - __start Index: src/share/examples/asm/hello/x86_64.s diff -u /dev/null src/share/examples/asm/hello/x86_64.s:1.1 --- /dev/null Fri Oct 14 19:41:18 2022 +++ src/share/examples/asm/hello/x86_64.s Fri Oct 14 19:41:18 2022 @@ -0,0 +1,89 @@ +/* $NetBSD: x86_64.s,v 1.1 2022/10/14 19:41:18 ryo Exp $ */ + +/*- + * Copyright (c) 2022 The NetBSD Foundation, Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED + * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS + * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ + +/* + * assemble & link: + * as -o x86_64.o x86_64.s + * ld -o hello -e _start x86_64.o + */ + + /* ------------------------------------------------------------------ */ + + /* + * This ELF section is used by the kernel to determine, among other + * things, the system call interface used by the binary. + * + * Normally, /usr/lib/crti.o is linked, but here it is written manually. + * + * SEE ALSO: + * - http://www.netbsd.org/docs/kernel/elf-notes.html + * - src/sys/sys/exec_elf.h + * - src/lib/csu/common/sysident.S + * - src/lib/csu/arch/x86_64/crti.S + */ + .section ".note.netbsd.ident", "a" + .p2align 2 + .long 7 /* ELF_NOTE_NETBSD_NAMESZ */ + .long 4 /* ELF_NOTE_NETBSD_DESCSZ */ + .long 1 /* ELF_NOTE_TYPE_NETBSD_TAG */ + .ascii "NetBSD\0\0" /* ELF_NOTE_NETBSD_NAME */ + .long 999010000 /* __NetBSD_Version__ (sys/sys/param.h) */ + + + /* ------------------------------------------------------------------ */ + + .section ".rodata" +message: + .ascii "Hello, world!\n" + .set MESSAGE_SIZE, . - message + + + /* ------------------------------------------------------------------ */ + + .section ".text" + .p2align 2 + + .global _start + .type _start, %function +_start: + /* write(STDOUT_FILENO, message, MESSAGE_SIZE) */ + movl $1, %edi /* %edi: fd = STDOUT_FILENO */ + leaq message(%rip), %rsi /* %rsi: buf = message */ + movl $MESSAGE_SIZE, %edx /* %edx: nbytes = MESSAGE_SIZE */ + + movl $4, %eax /* SYS_write */ + movq %rcx, %r10 + syscall + + /* exit(0) */ + xorl %edi, %edi /* %rdi: status = 0 */ + mov $1, %eax /* SYS_exit */ + movq %rcx, %r10 + syscall + + .size _start, . - _start