Merge svn+ssh://svn.freebsd.org/base/head@218875
This commit is contained in:
commit
24fa8d5f76
@ -1,5 +1,5 @@
|
||||
/* $FreeBSD$ */
|
||||
OUTPUT_FORMAT("elf64-x86-64", "elf64-x86-64", "elf64-x86-64")
|
||||
OUTPUT_FORMAT("elf64-x86-64-freebsd", "elf64-x86-64-freebsd", "elf64-x86-64-freebsd")
|
||||
OUTPUT_ARCH(i386:x86-64)
|
||||
ENTRY(_start)
|
||||
SECTIONS
|
||||
|
@ -1,5 +1,5 @@
|
||||
/* $FreeBSD$ */
|
||||
OUTPUT_FORMAT("elf64-ia64-little", "elf64-ia64-little", "elf64-ia64-little")
|
||||
OUTPUT_FORMAT("elf64-ia64-freebsd", "elf64-ia64-freebsd", "elf64-ia64-freebsd")
|
||||
OUTPUT_ARCH(ia64)
|
||||
ENTRY(_start_plabel)
|
||||
SECTIONS
|
||||
@ -16,17 +16,15 @@ SECTIONS
|
||||
*(.plt)
|
||||
} =0x00300000010070000002000001000400
|
||||
. = ALIGN(4096);
|
||||
__start_set_Xcommand_set = .;
|
||||
set_Xcommand_set : { *(set_Xcommand_set) }
|
||||
__stop_set_Xcommand_set = .;
|
||||
.data : {
|
||||
*(.rodata .rodata.* .gnu.linkonce.r.*)
|
||||
*(.rodata1)
|
||||
*(.sdata2 .sdata2.* .gnu.linkonce.s2.*)
|
||||
*(.sbss2 .sbss2.* .gnu.linkonce.sb2.*)
|
||||
*(.opd)
|
||||
*(.IA_64.unwind_info* .gnu.linkonce.ia64unwi.*)
|
||||
*(.IA_64.unwind* .gnu.linkonce.ia64unw.*)
|
||||
__start_set_Xcommand_set = .;
|
||||
*(set_Xcommand_set)
|
||||
__stop_set_Xcommand_set = .;
|
||||
*(.data .data.* .gnu.linkonce.d.*)
|
||||
*(.data1)
|
||||
*(.plabel)
|
||||
@ -34,6 +32,8 @@ SECTIONS
|
||||
*(.bss .bss.* .gnu.linkonce.b.*)
|
||||
*(COMMON)
|
||||
}
|
||||
.IA_64.unwind_info : { *(.IA_64.unwind_info* .gnu.linkonce.ia64unwi.*) }
|
||||
.IA_64.unwind : { *(.IA_64.unwind* .gnu.linkonce.ia64unw.*) }
|
||||
. = ALIGN(4096);
|
||||
__gp = .;
|
||||
.sdata : {
|
||||
|
@ -1,5 +1,5 @@
|
||||
/* $FreeBSD$ */
|
||||
OUTPUT_FORMAT("elf64-ia64-little", "elf64-ia64-little", "elf64-ia64-little")
|
||||
OUTPUT_FORMAT("elf64-ia64-freebsd", "elf64-ia64-freebsd", "elf64-ia64-freebsd")
|
||||
OUTPUT_ARCH(ia64)
|
||||
ENTRY(_start)
|
||||
SECTIONS
|
||||
@ -12,17 +12,15 @@ SECTIONS
|
||||
*(.gnu.warning)
|
||||
*(.plt)
|
||||
} =0x00300000010070000002000001000400
|
||||
__start_set_Xcommand_set = .;
|
||||
set_Xcommand_set : { *(set_Xcommand_set) }
|
||||
__stop_set_Xcommand_set = .;
|
||||
.data : {
|
||||
*(.rodata .rodata.* .gnu.linkonce.r.*)
|
||||
*(.rodata1)
|
||||
*(.sdata2 .sdata2.* .gnu.linkonce.s2.*)
|
||||
*(.sbss2 .sbss2.* .gnu.linkonce.sb2.*)
|
||||
*(.opd)
|
||||
*(.IA_64.unwind_info* .gnu.linkonce.ia64unwi.*)
|
||||
*(.IA_64.unwind* .gnu.linkonce.ia64unw.*)
|
||||
__start_set_Xcommand_set = .;
|
||||
*(set_Xcommand_set)
|
||||
__stop_set_Xcommand_set = .;
|
||||
*(.data .data.* .gnu.linkonce.d.*)
|
||||
*(.data1)
|
||||
*(.plabel)
|
||||
@ -30,6 +28,8 @@ SECTIONS
|
||||
*(.bss .bss.* .gnu.linkonce.b.*)
|
||||
*(COMMON)
|
||||
}
|
||||
.IA_64.unwind_info : { *(.IA_64.unwind_info* .gnu.linkonce.ia64unwi.*) }
|
||||
.IA_64.unwind : { *(.IA_64.unwind* .gnu.linkonce.ia64unw.*) }
|
||||
__gp = .;
|
||||
.sdata : {
|
||||
*(.got.plt .got)
|
||||
|
@ -484,23 +484,6 @@ load(void)
|
||||
p += roundup2(hdr.ex.a_text, PAGE_SIZE);
|
||||
if (xfsread(ino, p, hdr.ex.a_data))
|
||||
return;
|
||||
p += hdr.ex.a_data + roundup2(hdr.ex.a_bss, PAGE_SIZE);
|
||||
bootinfo.bi_symtab = VTOP(p);
|
||||
*(uint32_t*)p = hdr.ex.a_syms;
|
||||
p += sizeof(hdr.ex.a_syms);
|
||||
if (hdr.ex.a_syms) {
|
||||
if (xfsread(ino, p, hdr.ex.a_syms))
|
||||
return;
|
||||
p += hdr.ex.a_syms;
|
||||
if (xfsread(ino, p, sizeof(int)))
|
||||
return;
|
||||
x = *(uint32_t *)p;
|
||||
p += sizeof(int);
|
||||
x -= sizeof(int);
|
||||
if (xfsread(ino, p, x))
|
||||
return;
|
||||
p += x;
|
||||
}
|
||||
} else {
|
||||
fs_off = hdr.eh.e_phoff;
|
||||
for (j = i = 0; i < hdr.eh.e_phnum && j < 2; i++) {
|
||||
@ -532,8 +515,8 @@ load(void)
|
||||
}
|
||||
}
|
||||
addr = hdr.eh.e_entry & 0xffffff;
|
||||
bootinfo.bi_esymtab = VTOP(p);
|
||||
}
|
||||
bootinfo.bi_esymtab = VTOP(p);
|
||||
bootinfo.bi_kernelname = VTOP(kname);
|
||||
bootinfo.bi_bios_dev = dsk.daua;
|
||||
__exec((caddr_t)addr, RB_BOOTINFO | (opts & RBX_MASK),
|
||||
|
@ -103,6 +103,7 @@ ofwh_t stdinh, stdouth;
|
||||
|
||||
__asm(" \n\
|
||||
.data \n\
|
||||
.align 4 \n\
|
||||
stack: \n\
|
||||
.space 16384 \n\
|
||||
\n\
|
||||
|
@ -40,6 +40,7 @@ void startup(void *, int, int (*)(void *), char *, int);
|
||||
|
||||
__asm(" \n\
|
||||
.data \n\
|
||||
.align 4 \n\
|
||||
stack: \n\
|
||||
.space 16388 \n\
|
||||
\n\
|
||||
|
@ -81,6 +81,13 @@ CFLAGS+= -msoft-float -mno-altivec
|
||||
INLINE_LIMIT?= 15000
|
||||
.endif
|
||||
|
||||
#
|
||||
# Use dot symbols on powerpc64 to make ddb happy
|
||||
#
|
||||
.if ${MACHINE_ARCH} == "powerpc64"
|
||||
CFLAGS+= -mcall-aixdesc
|
||||
.endif
|
||||
|
||||
#
|
||||
# For MIPS we also tell gcc to use floating point emulation
|
||||
#
|
||||
|
@ -1,14 +1,15 @@
|
||||
/* $FreeBSD$ */
|
||||
OUTPUT_FORMAT("elf64-x86-64", "elf64-x86-64", "elf64-x86-64")
|
||||
OUTPUT_FORMAT("elf64-x86-64-freebsd", "elf64-x86-64-freebsd", "elf64-x86-64-freebsd")
|
||||
OUTPUT_ARCH(i386:x86-64)
|
||||
ENTRY(btext)
|
||||
SEARCH_DIR("/usr/lib");
|
||||
SECTIONS
|
||||
{
|
||||
/* Read-only sections, merged into text segment: */
|
||||
. = kernbase + 0x00100000 + SIZEOF_HEADERS;
|
||||
. = kernbase + CONSTANT (MAXPAGESIZE) + SIZEOF_HEADERS;
|
||||
.interp : { *(.interp) }
|
||||
.hash : { *(.hash) }
|
||||
.gnu.hash : { *(.gnu.hash) }
|
||||
.dynsym : { *(.dynsym) }
|
||||
.dynstr : { *(.dynstr) }
|
||||
.gnu.version : { *(.gnu.version) }
|
||||
@ -22,6 +23,8 @@ SECTIONS
|
||||
.rela.fini : { *(.rela.fini) }
|
||||
.rel.rodata : { *(.rel.rodata .rel.rodata.* .rel.gnu.linkonce.r.*) }
|
||||
.rela.rodata : { *(.rela.rodata .rela.rodata.* .rela.gnu.linkonce.r.*) }
|
||||
.rel.data.rel.ro : { *(.rel.data.rel.ro* .rel.gnu.linkonce.d.rel.ro.*) }
|
||||
.rela.data.rel.ro : { *(.rela.data.rel.ro* .rela.gnu.linkonce.d.rel.ro.*) }
|
||||
.rel.data : { *(.rel.data .rel.data.* .rel.gnu.linkonce.d.*) }
|
||||
.rela.data : { *(.rela.data .rela.data.* .rela.gnu.linkonce.d.*) }
|
||||
.rel.tdata : { *(.rel.tdata .rel.tdata.* .rel.gnu.linkonce.td.*) }
|
||||
@ -36,6 +39,12 @@ SECTIONS
|
||||
.rela.got : { *(.rela.got) }
|
||||
.rel.bss : { *(.rel.bss .rel.bss.* .rel.gnu.linkonce.b.*) }
|
||||
.rela.bss : { *(.rela.bss .rela.bss.* .rela.gnu.linkonce.b.*) }
|
||||
.rel.ldata : { *(.rel.ldata .rel.ldata.* .rel.gnu.linkonce.l.*) }
|
||||
.rela.ldata : { *(.rela.ldata .rela.ldata.* .rela.gnu.linkonce.l.*) }
|
||||
.rel.lbss : { *(.rel.lbss .rel.lbss.* .rel.gnu.linkonce.lb.*) }
|
||||
.rela.lbss : { *(.rela.lbss .rela.lbss.* .rela.gnu.linkonce.lb.*) }
|
||||
.rel.lrodata : { *(.rel.lrodata .rel.lrodata.* .rel.gnu.linkonce.lr.*) }
|
||||
.rela.lrodata : { *(.rela.lrodata .rela.lrodata.* .rela.gnu.linkonce.lr.*) }
|
||||
.rel.plt : { *(.rel.plt) }
|
||||
.rela.plt : { *(.rela.plt) }
|
||||
.init :
|
||||
@ -46,6 +55,7 @@ SECTIONS
|
||||
.text :
|
||||
{
|
||||
*(.text .stub .text.* .gnu.linkonce.t.*)
|
||||
KEEP (*(.text.*personality*))
|
||||
/* .gnu.warning sections are handled specially by elf32.em. */
|
||||
*(.gnu.warning)
|
||||
} =0x90909090
|
||||
@ -59,34 +69,37 @@ SECTIONS
|
||||
.rodata : { *(.rodata .rodata.* .gnu.linkonce.r.*) }
|
||||
.rodata1 : { *(.rodata1) }
|
||||
.eh_frame_hdr : { *(.eh_frame_hdr) }
|
||||
.eh_frame : ONLY_IF_RO { KEEP (*(.eh_frame)) }
|
||||
.gcc_except_table : ONLY_IF_RO { *(.gcc_except_table .gcc_except_table.*) }
|
||||
/* Adjust the address for the data segment. We want to adjust up to
|
||||
the same address within the page on the next page up. */
|
||||
. = DATA_SEGMENT_ALIGN(0x100000, 0x1000);
|
||||
/* Ensure the __preinit_array_start label is properly aligned. We
|
||||
could instead move the label definition inside the section, but
|
||||
the linker would then create the section even if it turns out to
|
||||
be empty, which isn't pretty. */
|
||||
. = ALIGN(64 / 8);
|
||||
PROVIDE (__preinit_array_start = .);
|
||||
.preinit_array : { *(.preinit_array) }
|
||||
PROVIDE (__preinit_array_end = .);
|
||||
PROVIDE (__init_array_start = .);
|
||||
.init_array : { *(.init_array) }
|
||||
PROVIDE (__init_array_end = .);
|
||||
PROVIDE (__fini_array_start = .);
|
||||
.fini_array : { *(.fini_array) }
|
||||
PROVIDE (__fini_array_end = .);
|
||||
.data :
|
||||
{
|
||||
*(.data .data.* .gnu.linkonce.d.*)
|
||||
SORT(CONSTRUCTORS)
|
||||
}
|
||||
.data1 : { *(.data1) }
|
||||
. = ALIGN (CONSTANT (MAXPAGESIZE)) - ((CONSTANT (MAXPAGESIZE) - .) & (CONSTANT (MAXPAGESIZE) - 1)); . = DATA_SEGMENT_ALIGN (CONSTANT (MAXPAGESIZE), CONSTANT (COMMONPAGESIZE));
|
||||
/* Exception handling */
|
||||
.eh_frame : ONLY_IF_RW { KEEP (*(.eh_frame)) }
|
||||
.gcc_except_table : ONLY_IF_RW { *(.gcc_except_table .gcc_except_table.*) }
|
||||
/* Thread Local Storage sections */
|
||||
.tdata : { *(.tdata .tdata.* .gnu.linkonce.td.*) }
|
||||
.tbss : { *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) }
|
||||
.eh_frame : { KEEP (*(.eh_frame)) }
|
||||
.gcc_except_table : { *(.gcc_except_table) }
|
||||
.dynamic : { *(.dynamic) }
|
||||
.preinit_array :
|
||||
{
|
||||
PROVIDE_HIDDEN (__preinit_array_start = .);
|
||||
KEEP (*(.preinit_array))
|
||||
PROVIDE_HIDDEN (__preinit_array_end = .);
|
||||
}
|
||||
.init_array :
|
||||
{
|
||||
PROVIDE_HIDDEN (__init_array_start = .);
|
||||
KEEP (*(SORT(.init_array.*)))
|
||||
KEEP (*(.init_array))
|
||||
PROVIDE_HIDDEN (__init_array_end = .);
|
||||
}
|
||||
.fini_array :
|
||||
{
|
||||
PROVIDE_HIDDEN (__fini_array_start = .);
|
||||
KEEP (*(.fini_array))
|
||||
KEEP (*(SORT(.fini_array.*)))
|
||||
PROVIDE_HIDDEN (__fini_array_end = .);
|
||||
}
|
||||
_start_ctors = .;
|
||||
PROVIDE (start_ctors = .);
|
||||
.ctors :
|
||||
@ -101,11 +114,12 @@ SECTIONS
|
||||
doesn't matter which directory crtbegin.o
|
||||
is in. */
|
||||
KEEP (*crtbegin.o(.ctors))
|
||||
KEEP (*crtbegin?.o(.ctors))
|
||||
/* We don't want to include the .ctor section from
|
||||
from the crtend.o file until after the sorted ctors.
|
||||
the crtend.o file until after the sorted ctors.
|
||||
The .ctor section from the crtend file contains the
|
||||
end of ctors marker and it must be last */
|
||||
KEEP (*(EXCLUDE_FILE (*crtend.o ) .ctors))
|
||||
KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .ctors))
|
||||
KEEP (*(SORT(.ctors.*)))
|
||||
KEEP (*(.ctors))
|
||||
}
|
||||
@ -114,14 +128,25 @@ SECTIONS
|
||||
.dtors :
|
||||
{
|
||||
KEEP (*crtbegin.o(.dtors))
|
||||
KEEP (*(EXCLUDE_FILE (*crtend.o ) .dtors))
|
||||
KEEP (*crtbegin?.o(.dtors))
|
||||
KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .dtors))
|
||||
KEEP (*(SORT(.dtors.*)))
|
||||
KEEP (*(.dtors))
|
||||
}
|
||||
.jcr : { KEEP (*(.jcr)) }
|
||||
.got : { *(.got.plt) *(.got) }
|
||||
_edata = .;
|
||||
PROVIDE (edata = .);
|
||||
.data.rel.ro : { *(.data.rel.ro.local* .gnu.linkonce.d.rel.ro.local.*) *(.data.rel.ro* .gnu.linkonce.d.rel.ro.*) }
|
||||
.dynamic : { *(.dynamic) }
|
||||
.got : { *(.got) }
|
||||
. = DATA_SEGMENT_RELRO_END (24, .);
|
||||
.got.plt : { *(.got.plt) }
|
||||
.data :
|
||||
{
|
||||
*(.data .data.* .gnu.linkonce.d.*)
|
||||
KEEP (*(.gnu.linkonce.d.*personality*))
|
||||
SORT(CONSTRUCTORS)
|
||||
}
|
||||
.data1 : { *(.data1) }
|
||||
_edata = .; PROVIDE (edata = .);
|
||||
__bss_start = .;
|
||||
.bss :
|
||||
{
|
||||
@ -130,12 +155,29 @@ SECTIONS
|
||||
*(COMMON)
|
||||
/* Align here to ensure that the .bss section occupies space up to
|
||||
_end. Align after .bss to ensure correct alignment even if the
|
||||
.bss section disappears because there are no input sections. */
|
||||
. = ALIGN(64 / 8);
|
||||
.bss section disappears because there are no input sections.
|
||||
FIXME: Why do we need it? When there is no .bss section, we don't
|
||||
pad the .data section. */
|
||||
. = ALIGN(. != 0 ? 64 / 8 : 1);
|
||||
}
|
||||
.lbss :
|
||||
{
|
||||
*(.dynlbss)
|
||||
*(.lbss .lbss.* .gnu.linkonce.lb.*)
|
||||
*(LARGE_COMMON)
|
||||
}
|
||||
. = ALIGN(64 / 8);
|
||||
_end = .;
|
||||
PROVIDE (end = .);
|
||||
.lrodata ALIGN(CONSTANT (MAXPAGESIZE)) + (. & (CONSTANT (MAXPAGESIZE) - 1)) :
|
||||
{
|
||||
*(.lrodata .lrodata.* .gnu.linkonce.lr.*)
|
||||
}
|
||||
.ldata ALIGN(CONSTANT (MAXPAGESIZE)) + (. & (CONSTANT (MAXPAGESIZE) - 1)) :
|
||||
{
|
||||
*(.ldata .ldata.* .gnu.linkonce.l.*)
|
||||
. = ALIGN(. != 0 ? 64 / 8 : 1);
|
||||
}
|
||||
. = ALIGN(64 / 8);
|
||||
_end = .; PROVIDE (end = .);
|
||||
. = DATA_SEGMENT_END (.);
|
||||
/* Stabs debugging sections. */
|
||||
.stab 0 : { *(.stab) }
|
||||
@ -170,4 +212,9 @@ SECTIONS
|
||||
.debug_funcnames 0 : { *(.debug_funcnames) }
|
||||
.debug_typenames 0 : { *(.debug_typenames) }
|
||||
.debug_varnames 0 : { *(.debug_varnames) }
|
||||
/* DWARF 3 */
|
||||
.debug_pubtypes 0 : { *(.debug_pubtypes) }
|
||||
.debug_ranges 0 : { *(.debug_ranges) }
|
||||
.gnu.attributes 0 : { KEEP (*(.gnu.attributes)) }
|
||||
/DISCARD/ : { *(.note.GNU-stack) }
|
||||
}
|
||||
|
@ -7,104 +7,165 @@ SECTIONS
|
||||
{
|
||||
/* Read-only sections, merged into text segment: */
|
||||
. = kernbase + kernload + SIZEOF_HEADERS;
|
||||
.interp : { *(.interp) }
|
||||
.hash : { *(.hash) }
|
||||
.dynsym : { *(.dynsym) }
|
||||
.dynstr : { *(.dynstr) }
|
||||
.gnu.version : { *(.gnu.version) }
|
||||
.gnu.version_d : { *(.gnu.version_d) }
|
||||
.gnu.version_r : { *(.gnu.version_r) }
|
||||
.rel.text :
|
||||
{ *(.rel.text) *(.rel.gnu.linkonce.t*) }
|
||||
.rela.text :
|
||||
{ *(.rela.text) *(.rela.gnu.linkonce.t*) }
|
||||
.rel.data :
|
||||
{ *(.rel.data) *(.rel.gnu.linkonce.d*) }
|
||||
.rela.data :
|
||||
{ *(.rela.data) *(.rela.gnu.linkonce.d*) }
|
||||
.rel.rodata :
|
||||
{ *(.rel.rodata) *(.rel.gnu.linkonce.r*) }
|
||||
.rela.rodata :
|
||||
{ *(.rela.rodata) *(.rela.gnu.linkonce.r*) }
|
||||
.rel.got : { *(.rel.got) }
|
||||
.rela.got : { *(.rela.got) }
|
||||
.rel.ctors : { *(.rel.ctors) }
|
||||
.rela.ctors : { *(.rela.ctors) }
|
||||
.rel.dtors : { *(.rel.dtors) }
|
||||
.rela.dtors : { *(.rela.dtors) }
|
||||
.rel.init : { *(.rel.init) }
|
||||
.rela.init : { *(.rela.init) }
|
||||
.rel.fini : { *(.rel.fini) }
|
||||
.rela.fini : { *(.rela.fini) }
|
||||
.rel.bss : { *(.rel.bss) }
|
||||
.rela.bss : { *(.rela.bss) }
|
||||
.rel.plt : { *(.rel.plt) }
|
||||
.rela.plt : { *(.rela.plt) }
|
||||
.init : { *(.init) } =0x9090
|
||||
.plt : { *(.plt) }
|
||||
.text :
|
||||
.interp : { *(.interp) }
|
||||
.hash : { *(.hash) }
|
||||
.gnu.hash : { *(.gnu.hash) }
|
||||
.dynsym : { *(.dynsym) }
|
||||
.dynstr : { *(.dynstr) }
|
||||
.gnu.version : { *(.gnu.version) }
|
||||
.gnu.version_d : { *(.gnu.version_d) }
|
||||
.gnu.version_r : { *(.gnu.version_r) }
|
||||
.rel.init : { *(.rel.init) }
|
||||
.rela.init : { *(.rela.init) }
|
||||
.rel.text : { *(.rel.text .rel.text.* .rel.gnu.linkonce.t.*) }
|
||||
.rela.text : { *(.rela.text .rela.text.* .rela.gnu.linkonce.t.*) }
|
||||
.rel.fini : { *(.rel.fini) }
|
||||
.rela.fini : { *(.rela.fini) }
|
||||
.rel.rodata : { *(.rel.rodata .rel.rodata.* .rel.gnu.linkonce.r.*) }
|
||||
.rela.rodata : { *(.rela.rodata .rela.rodata.* .rela.gnu.linkonce.r.*) }
|
||||
.rel.data.rel.ro : { *(.rel.data.rel.ro* .rel.gnu.linkonce.d.rel.ro.*) }
|
||||
.rela.data.rel.ro : { *(.rela.data.rel.ro* .rela.gnu.linkonce.d.rel.ro.*) }
|
||||
.rel.data : { *(.rel.data .rel.data.* .rel.gnu.linkonce.d.*) }
|
||||
.rela.data : { *(.rela.data .rela.data.* .rela.gnu.linkonce.d.*) }
|
||||
.rel.tdata : { *(.rel.tdata .rel.tdata.* .rel.gnu.linkonce.td.*) }
|
||||
.rela.tdata : { *(.rela.tdata .rela.tdata.* .rela.gnu.linkonce.td.*) }
|
||||
.rel.tbss : { *(.rel.tbss .rel.tbss.* .rel.gnu.linkonce.tb.*) }
|
||||
.rela.tbss : { *(.rela.tbss .rela.tbss.* .rela.gnu.linkonce.tb.*) }
|
||||
.rel.ctors : { *(.rel.ctors) }
|
||||
.rela.ctors : { *(.rela.ctors) }
|
||||
.rel.dtors : { *(.rel.dtors) }
|
||||
.rela.dtors : { *(.rela.dtors) }
|
||||
.rel.got : { *(.rel.got) }
|
||||
.rela.got : { *(.rela.got) }
|
||||
.rel.bss : { *(.rel.bss .rel.bss.* .rel.gnu.linkonce.b.*) }
|
||||
.rela.bss : { *(.rela.bss .rela.bss.* .rela.gnu.linkonce.b.*) }
|
||||
.rel.plt : { *(.rel.plt) }
|
||||
.rela.plt : { *(.rela.plt) }
|
||||
.init :
|
||||
{
|
||||
*(.text)
|
||||
*(.stub)
|
||||
KEEP (*(.init))
|
||||
} =0x90909090
|
||||
.plt : { *(.plt) }
|
||||
.text :
|
||||
{
|
||||
*(.text .stub .text.* .gnu.linkonce.t.*)
|
||||
KEEP (*(.text.*personality*))
|
||||
/* .gnu.warning sections are handled specially by elf32.em. */
|
||||
*(.gnu.warning)
|
||||
*(.gnu.linkonce.t*)
|
||||
} =0x9090
|
||||
_etext = .;
|
||||
} =0x90909090
|
||||
.fini :
|
||||
{
|
||||
KEEP (*(.fini))
|
||||
} =0x90909090
|
||||
PROVIDE (__etext = .);
|
||||
PROVIDE (_etext = .);
|
||||
PROVIDE (etext = .);
|
||||
.fini : { *(.fini) } =0x9090
|
||||
.rodata : { *(.rodata) *(.gnu.linkonce.r*) }
|
||||
.rodata1 : { *(.rodata1) }
|
||||
.rodata : { *(.rodata .rodata.* .gnu.linkonce.r.*) }
|
||||
.rodata1 : { *(.rodata1) }
|
||||
.eh_frame_hdr : { *(.eh_frame_hdr) }
|
||||
.eh_frame : ONLY_IF_RO { KEEP (*(.eh_frame)) }
|
||||
.gcc_except_table : ONLY_IF_RO { *(.gcc_except_table .gcc_except_table.*) }
|
||||
/* Adjust the address for the data segment. We want to adjust up to
|
||||
the same address within the page on the next page up. */
|
||||
. = ALIGN(0x1000) + (. & (0x1000 - 1)) ;
|
||||
.data :
|
||||
. = ALIGN (CONSTANT (MAXPAGESIZE)) - ((CONSTANT (MAXPAGESIZE) - .) & (CONSTANT (MAXPAGESIZE) - 1)); . = DATA_SEGMENT_ALIGN (CONSTANT (MAXPAGESIZE), CONSTANT (COMMONPAGESIZE));
|
||||
/* Exception handling */
|
||||
.eh_frame : ONLY_IF_RW { KEEP (*(.eh_frame)) }
|
||||
.gcc_except_table : ONLY_IF_RW { *(.gcc_except_table .gcc_except_table.*) }
|
||||
/* Thread Local Storage sections */
|
||||
.tdata : { *(.tdata .tdata.* .gnu.linkonce.td.*) }
|
||||
.tbss : { *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) }
|
||||
.preinit_array :
|
||||
{
|
||||
*(.data)
|
||||
*(.gnu.linkonce.d*)
|
||||
CONSTRUCTORS
|
||||
PROVIDE_HIDDEN (__preinit_array_start = .);
|
||||
KEEP (*(.preinit_array))
|
||||
PROVIDE_HIDDEN (__preinit_array_end = .);
|
||||
}
|
||||
.init_array :
|
||||
{
|
||||
PROVIDE_HIDDEN (__init_array_start = .);
|
||||
KEEP (*(SORT(.init_array.*)))
|
||||
KEEP (*(.init_array))
|
||||
PROVIDE_HIDDEN (__init_array_end = .);
|
||||
}
|
||||
.fini_array :
|
||||
{
|
||||
PROVIDE_HIDDEN (__fini_array_start = .);
|
||||
KEEP (*(.fini_array))
|
||||
KEEP (*(SORT(.fini_array.*)))
|
||||
PROVIDE_HIDDEN (__fini_array_end = .);
|
||||
}
|
||||
.data1 : { *(.data1) }
|
||||
. = ALIGN(32 / 8);
|
||||
_start_ctors = .;
|
||||
PROVIDE (start_ctors = .);
|
||||
.ctors :
|
||||
.ctors :
|
||||
{
|
||||
*(.ctors)
|
||||
/* gcc uses crtbegin.o to find the start of
|
||||
the constructors, so we make sure it is
|
||||
first. Because this is a wildcard, it
|
||||
doesn't matter if the user does not
|
||||
actually link against crtbegin.o; the
|
||||
linker won't look for a file to match a
|
||||
wildcard. The wildcard also means that it
|
||||
doesn't matter which directory crtbegin.o
|
||||
is in. */
|
||||
KEEP (*crtbegin.o(.ctors))
|
||||
KEEP (*crtbegin?.o(.ctors))
|
||||
/* We don't want to include the .ctor section from
|
||||
the crtend.o file until after the sorted ctors.
|
||||
The .ctor section from the crtend file contains the
|
||||
end of ctors marker and it must be last */
|
||||
KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .ctors))
|
||||
KEEP (*(SORT(.ctors.*)))
|
||||
KEEP (*(.ctors))
|
||||
}
|
||||
_stop_ctors = .;
|
||||
PROVIDE (stop_ctors = .);
|
||||
.dtors :
|
||||
.dtors :
|
||||
{
|
||||
*(.dtors)
|
||||
KEEP (*crtbegin.o(.dtors))
|
||||
KEEP (*crtbegin?.o(.dtors))
|
||||
KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .dtors))
|
||||
KEEP (*(SORT(.dtors.*)))
|
||||
KEEP (*(.dtors))
|
||||
}
|
||||
.got : { *(.got.plt) *(.got) }
|
||||
.dynamic : { *(.dynamic) }
|
||||
/* We want the small data sections together, so single-instruction offsets
|
||||
can access them all, and initialized data all before uninitialized, so
|
||||
we can shorten the on-disk segment size. */
|
||||
.sdata : { *(.sdata) }
|
||||
_edata = .;
|
||||
PROVIDE (edata = .);
|
||||
.jcr : { KEEP (*(.jcr)) }
|
||||
.data.rel.ro : { *(.data.rel.ro.local* .gnu.linkonce.d.rel.ro.local.*) *(.data.rel.ro* .gnu.linkonce.d.rel.ro.*) }
|
||||
.dynamic : { *(.dynamic) }
|
||||
.got : { *(.got) }
|
||||
. = DATA_SEGMENT_RELRO_END (12, .);
|
||||
.got.plt : { *(.got.plt) }
|
||||
.data :
|
||||
{
|
||||
*(.data .data.* .gnu.linkonce.d.*)
|
||||
KEEP (*(.gnu.linkonce.d.*personality*))
|
||||
SORT(CONSTRUCTORS)
|
||||
}
|
||||
.data1 : { *(.data1) }
|
||||
_edata = .; PROVIDE (edata = .);
|
||||
__bss_start = .;
|
||||
.sbss : { *(.sbss) *(.scommon) }
|
||||
.bss :
|
||||
.bss :
|
||||
{
|
||||
*(.dynbss)
|
||||
*(.bss)
|
||||
*(.bss .bss.* .gnu.linkonce.b.*)
|
||||
*(COMMON)
|
||||
/* Align here to ensure that the .bss section occupies space up to
|
||||
_end. Align after .bss to ensure correct alignment even if the
|
||||
.bss section disappears because there are no input sections.
|
||||
FIXME: Why do we need it? When there is no .bss section, we don't
|
||||
pad the .data section. */
|
||||
. = ALIGN(. != 0 ? 32 / 8 : 1);
|
||||
}
|
||||
. = ALIGN(32 / 8);
|
||||
_end = . ;
|
||||
PROVIDE (end = .);
|
||||
. = ALIGN(32 / 8);
|
||||
_end = .; PROVIDE (end = .);
|
||||
. = DATA_SEGMENT_END (.);
|
||||
/* Stabs debugging sections. */
|
||||
.stab 0 : { *(.stab) }
|
||||
.stabstr 0 : { *(.stabstr) }
|
||||
.stab.excl 0 : { *(.stab.excl) }
|
||||
.stab.exclstr 0 : { *(.stab.exclstr) }
|
||||
.stab.index 0 : { *(.stab.index) }
|
||||
.stab 0 : { *(.stab) }
|
||||
.stabstr 0 : { *(.stabstr) }
|
||||
.stab.excl 0 : { *(.stab.excl) }
|
||||
.stab.exclstr 0 : { *(.stab.exclstr) }
|
||||
.stab.index 0 : { *(.stab.index) }
|
||||
.stab.indexstr 0 : { *(.stab.indexstr) }
|
||||
.comment 0 : { *(.comment) }
|
||||
.comment 0 : { *(.comment) }
|
||||
/* DWARF debug sections.
|
||||
Symbols in the DWARF debugging sections are relative to the beginning
|
||||
of the section so we begin them at 0. */
|
||||
@ -118,7 +179,7 @@ SECTIONS
|
||||
.debug_aranges 0 : { *(.debug_aranges) }
|
||||
.debug_pubnames 0 : { *(.debug_pubnames) }
|
||||
/* DWARF 2 */
|
||||
.debug_info 0 : { *(.debug_info) }
|
||||
.debug_info 0 : { *(.debug_info .gnu.linkonce.wi.*) }
|
||||
.debug_abbrev 0 : { *(.debug_abbrev) }
|
||||
.debug_line 0 : { *(.debug_line) }
|
||||
.debug_frame 0 : { *(.debug_frame) }
|
||||
@ -130,5 +191,9 @@ SECTIONS
|
||||
.debug_funcnames 0 : { *(.debug_funcnames) }
|
||||
.debug_typenames 0 : { *(.debug_typenames) }
|
||||
.debug_varnames 0 : { *(.debug_varnames) }
|
||||
/* These must appear regardless of . */
|
||||
/* DWARF 3 */
|
||||
.debug_pubtypes 0 : { *(.debug_pubtypes) }
|
||||
.debug_ranges 0 : { *(.debug_ranges) }
|
||||
.gnu.attributes 0 : { KEEP (*(.gnu.attributes)) }
|
||||
/DISCARD/ : { *(.note.GNU-stack) }
|
||||
}
|
||||
|
@ -1,5 +1,5 @@
|
||||
/* $FreeBSD$ */
|
||||
OUTPUT_FORMAT("elf64-ia64-little", "elf64-ia64-little", "elf64-ia64-little")
|
||||
OUTPUT_FORMAT("elf64-ia64-freebsd", "elf64-ia64-freebsd", "elf64-ia64-freebsd")
|
||||
OUTPUT_ARCH(ia64)
|
||||
ENTRY(__start)
|
||||
SEARCH_DIR(/usr/lib);
|
||||
|
@ -1,6 +1,6 @@
|
||||
/* $FreeBSD$ */
|
||||
OUTPUT_FORMAT("elf64-sparc", "elf64-sparc",
|
||||
"elf64-sparc")
|
||||
OUTPUT_FORMAT("elf64-sparc-freebsd", "elf64-sparc-freebsd",
|
||||
"elf64-sparc-freebsd")
|
||||
OUTPUT_ARCH(sparc:v9)
|
||||
ENTRY(_start)
|
||||
SEARCH_DIR(/usr/lib);
|
||||
|
@ -723,10 +723,16 @@ static void
|
||||
db_gdb(db_expr_t dummy1, boolean_t dummy2, db_expr_t dummy3, char *dummy4)
|
||||
{
|
||||
|
||||
if (kdb_dbbe_select("gdb") != 0)
|
||||
if (kdb_dbbe_select("gdb") != 0) {
|
||||
db_printf("The remote GDB backend could not be selected.\n");
|
||||
else
|
||||
db_printf("Step to enter the remote GDB backend.\n");
|
||||
return;
|
||||
}
|
||||
/*
|
||||
* Mark that we are done in the debugger. kdb_trap()
|
||||
* should re-enter with the new backend.
|
||||
*/
|
||||
db_cmd_loop_done = 1;
|
||||
db_printf("(ctrl-c will return control to ddb)\n");
|
||||
}
|
||||
|
||||
static void
|
||||
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@ -89,6 +89,7 @@ static struct pci_id pci_ids[] = {
|
||||
{ 0x84031415, "Oxford Semiconductor OX12PCI840 Parallel port", 0x10 },
|
||||
{ 0x95131415, "Oxford Semiconductor OX16PCI954 Parallel port", 0x10 },
|
||||
{ 0x98059710, "NetMos NM9805 1284 Printer port", 0x10 },
|
||||
{ 0x98659710, "MosChip MCS9865 1284 Printer port", 0x10 },
|
||||
{ 0x99019710, "MosChip MCS9901 PCIe to Peripheral Controller", 0x10 },
|
||||
{ 0xffff }
|
||||
};
|
||||
|
@ -206,6 +206,10 @@ static const struct usb_device_id udav_devs[] = {
|
||||
{USB_VPI(USB_VENDOR_SHANTOU, USB_PRODUCT_SHANTOU_ST268, 0)},
|
||||
/* Corega USB-TXC */
|
||||
{USB_VPI(USB_VENDOR_COREGA, USB_PRODUCT_COREGA_FETHER_USB_TXC, 0)},
|
||||
/* ShanTou AMD8515 USB NIC */
|
||||
{USB_VPI(USB_VENDOR_SHANTOU, USB_PRODUCT_SHANTOU_ADM8515, 0)},
|
||||
/* Kontron AG USB Ethernet */
|
||||
{USB_VPI(USB_VENDOR_KONTRON, USB_PRODUCT_KONTRON_DM9601, 0)},
|
||||
};
|
||||
|
||||
static void
|
||||
|
@ -551,6 +551,7 @@ vendor VTECH 0x0f88 VTech
|
||||
vendor FALCOM 0x0f94 Falcom Wireless Communications GmbH
|
||||
vendor RIM 0x0fca Research In Motion
|
||||
vendor DYNASTREAM 0x0fcf Dynastream Innovations
|
||||
vendor KONTRON 0x0fe6 Kontron AG
|
||||
vendor QUALCOMM 0x1004 Qualcomm
|
||||
vendor APACER 0x1005 Apacer
|
||||
vendor MOTOROLA4 0x100d Motorola
|
||||
@ -2008,6 +2009,9 @@ product KODAK DC290 0x0112 Digital Science DC290
|
||||
product KODAK DC240 0x0120 Digital Science DC240
|
||||
product KODAK DC280 0x0130 Digital Science DC280
|
||||
|
||||
/* Kontron AG products */
|
||||
product KONTRON DM9601 0x8101 USB Ethernet
|
||||
|
||||
/* Konica Corp. Products */
|
||||
product KONICA CAMERA 0x0720 Digital Color Camera
|
||||
|
||||
@ -2843,6 +2847,7 @@ product SENAO RT3072_5 0x9801 RT3072
|
||||
/* ShanTou products */
|
||||
product SHANTOU ST268 0x0268 ST268
|
||||
product SHANTOU DM9601 0x9601 DM 9601
|
||||
product SHANTOU ADM8515 0x8515 ADM8515
|
||||
|
||||
/* Shark products */
|
||||
product SHARK PA 0x0400 Pocket Adapter
|
||||
|
@ -853,8 +853,7 @@ tmpfs_remove(struct vop_remove_args *v)
|
||||
tmpfs_free_dirent(tmp, de, TRUE);
|
||||
|
||||
if (node->tn_links > 0)
|
||||
node->tn_status |= TMPFS_NODE_ACCESSED | TMPFS_NODE_CHANGED | \
|
||||
TMPFS_NODE_MODIFIED;
|
||||
node->tn_status |= TMPFS_NODE_ACCESSED | TMPFS_NODE_CHANGED;
|
||||
error = 0;
|
||||
|
||||
out:
|
||||
|
@ -95,7 +95,17 @@ gdb_init(void)
|
||||
static int
|
||||
gdb_trap(int type, int code)
|
||||
{
|
||||
jmp_buf jb;
|
||||
struct thread *thr_iter;
|
||||
void *prev_jb;
|
||||
|
||||
prev_jb = kdb_jmpbuf(jb);
|
||||
if (setjmp(jb) != 0) {
|
||||
printf("%s bailing, hopefully back to ddb!\n", __func__);
|
||||
gdb_listening = 0;
|
||||
(void)kdb_jmpbuf(prev_jb);
|
||||
return (1);
|
||||
}
|
||||
|
||||
gdb_listening = 0;
|
||||
/*
|
||||
@ -291,5 +301,6 @@ gdb_trap(int type, int code)
|
||||
break;
|
||||
}
|
||||
}
|
||||
(void)kdb_jmpbuf(prev_jb);
|
||||
return (0);
|
||||
}
|
||||
|
@ -31,6 +31,7 @@ __FBSDID("$FreeBSD$");
|
||||
#include <sys/systm.h>
|
||||
#include <sys/ctype.h>
|
||||
#include <sys/kdb.h>
|
||||
#include <sys/ttydefaults.h>
|
||||
|
||||
#include <machine/gdb_machdep.h>
|
||||
#include <machine/kdb.h>
|
||||
@ -60,6 +61,17 @@ gdb_getc(void)
|
||||
do
|
||||
c = gdb_cur->gdb_getc();
|
||||
while (c == -1);
|
||||
|
||||
if (c == CTRL('C')) {
|
||||
printf("Received ^C; trying to switch back to ddb.\n");
|
||||
|
||||
if (kdb_dbbe_select("ddb") != 0)
|
||||
printf("The ddb backend could not be selected.\n");
|
||||
else {
|
||||
printf("using longjmp, hope it works!\n");
|
||||
kdb_reenter();
|
||||
}
|
||||
}
|
||||
return (c);
|
||||
}
|
||||
|
||||
|
@ -140,6 +140,20 @@ pc98_parse_type(const char *type, u_char *dp_mid, u_char *dp_sid)
|
||||
return (EINVAL);
|
||||
}
|
||||
|
||||
static int
|
||||
pc98_set_slicename(const char *label, u_char *dp_name)
|
||||
{
|
||||
int len;
|
||||
|
||||
len = strlen(label);
|
||||
if (len > sizeof(((struct pc98_partition *)NULL)->dp_name))
|
||||
return (EINVAL);
|
||||
bzero(dp_name, sizeof(((struct pc98_partition *)NULL)->dp_name));
|
||||
strncpy(dp_name, label, len);
|
||||
|
||||
return (0);
|
||||
}
|
||||
|
||||
static void
|
||||
pc98_set_chs(struct g_part_table *table, uint32_t lba, u_short *cylp,
|
||||
u_char *hdp, u_char *secp)
|
||||
@ -164,9 +178,7 @@ g_part_pc98_add(struct g_part_table *basetable, struct g_part_entry *baseentry,
|
||||
struct g_part_pc98_entry *entry;
|
||||
struct g_part_pc98_table *table;
|
||||
uint32_t cyl, start, size;
|
||||
|
||||
if (gpp->gpp_parms & G_PART_PARM_LABEL)
|
||||
return (EINVAL);
|
||||
int error;
|
||||
|
||||
cyl = basetable->gpt_heads * basetable->gpt_sectors;
|
||||
|
||||
@ -199,8 +211,16 @@ g_part_pc98_add(struct g_part_table *basetable, struct g_part_entry *baseentry,
|
||||
&entry->ent.dp_shd, &entry->ent.dp_ssect);
|
||||
pc98_set_chs(basetable, baseentry->gpe_end, &entry->ent.dp_ecyl,
|
||||
&entry->ent.dp_ehd, &entry->ent.dp_esect);
|
||||
return (pc98_parse_type(gpp->gpp_type, &entry->ent.dp_mid,
|
||||
&entry->ent.dp_sid));
|
||||
|
||||
error = pc98_parse_type(gpp->gpp_type, &entry->ent.dp_mid,
|
||||
&entry->ent.dp_sid);
|
||||
if (error)
|
||||
return (error);
|
||||
|
||||
if (gpp->gpp_parms & G_PART_PARM_LABEL)
|
||||
return (pc98_set_slicename(gpp->gpp_label, entry->ent.dp_name));
|
||||
|
||||
return (0);
|
||||
}
|
||||
|
||||
static int
|
||||
@ -231,7 +251,7 @@ g_part_pc98_create(struct g_part_table *basetable, struct g_part_parms *gpp)
|
||||
pp = gpp->gpp_provider;
|
||||
cp = LIST_FIRST(&pp->consumers);
|
||||
|
||||
if (pp->sectorsize < SECSIZE || pp->mediasize < 2 * SECSIZE)
|
||||
if (pp->sectorsize < SECSIZE || pp->mediasize < BOOTSIZE)
|
||||
return (ENOSPC);
|
||||
if (pp->sectorsize > SECSIZE)
|
||||
return (ENXIO);
|
||||
@ -305,14 +325,20 @@ g_part_pc98_modify(struct g_part_table *basetable,
|
||||
struct g_part_entry *baseentry, struct g_part_parms *gpp)
|
||||
{
|
||||
struct g_part_pc98_entry *entry;
|
||||
|
||||
if (gpp->gpp_parms & G_PART_PARM_LABEL)
|
||||
return (EINVAL);
|
||||
int error;
|
||||
|
||||
entry = (struct g_part_pc98_entry *)baseentry;
|
||||
if (gpp->gpp_parms & G_PART_PARM_TYPE)
|
||||
return (pc98_parse_type(gpp->gpp_type, &entry->ent.dp_mid,
|
||||
&entry->ent.dp_sid));
|
||||
|
||||
if (gpp->gpp_parms & G_PART_PARM_TYPE) {
|
||||
error = pc98_parse_type(gpp->gpp_type, &entry->ent.dp_mid,
|
||||
&entry->ent.dp_sid);
|
||||
if (error)
|
||||
return (error);
|
||||
}
|
||||
|
||||
if (gpp->gpp_parms & G_PART_PARM_LABEL)
|
||||
return (pc98_set_slicename(gpp->gpp_label, entry->ent.dp_name));
|
||||
|
||||
return (0);
|
||||
}
|
||||
|
||||
|
@ -37,6 +37,7 @@ __FBSDID("$FreeBSD$");
|
||||
#include <sys/malloc.h>
|
||||
#include <sys/pcpu.h>
|
||||
#include <sys/proc.h>
|
||||
#include <sys/sbuf.h>
|
||||
#include <sys/smp.h>
|
||||
#include <sys/stack.h>
|
||||
#include <sys/sysctl.h>
|
||||
@ -108,33 +109,17 @@ const char * volatile kdb_why = KDB_WHY_UNSET;
|
||||
static int
|
||||
kdb_sysctl_available(SYSCTL_HANDLER_ARGS)
|
||||
{
|
||||
struct kdb_dbbe *be, **iter;
|
||||
char *avail, *p;
|
||||
ssize_t len, sz;
|
||||
struct kdb_dbbe **iter;
|
||||
struct sbuf sbuf;
|
||||
int error;
|
||||
|
||||
sz = 0;
|
||||
sbuf_new_for_sysctl(&sbuf, NULL, 64, req);
|
||||
SET_FOREACH(iter, kdb_dbbe_set) {
|
||||
be = *iter;
|
||||
if (be->dbbe_active == 0)
|
||||
sz += strlen(be->dbbe_name) + 1;
|
||||
if ((*iter)->dbbe_active == 0)
|
||||
sbuf_printf(&sbuf, "%s ", (*iter)->dbbe_name);
|
||||
}
|
||||
sz++;
|
||||
avail = malloc(sz, M_TEMP, M_WAITOK);
|
||||
p = avail;
|
||||
*p = '\0';
|
||||
|
||||
SET_FOREACH(iter, kdb_dbbe_set) {
|
||||
be = *iter;
|
||||
if (be->dbbe_active == 0) {
|
||||
len = snprintf(p, sz, "%s ", be->dbbe_name);
|
||||
p += len;
|
||||
sz -= len;
|
||||
}
|
||||
}
|
||||
KASSERT(sz >= 0, ("%s", __func__));
|
||||
error = sysctl_handle_string(oidp, avail, 0, req);
|
||||
free(avail, M_TEMP);
|
||||
error = sbuf_finish(&sbuf);
|
||||
sbuf_delete(&sbuf);
|
||||
return (error);
|
||||
}
|
||||
|
||||
@ -144,10 +129,9 @@ kdb_sysctl_current(SYSCTL_HANDLER_ARGS)
|
||||
char buf[16];
|
||||
int error;
|
||||
|
||||
if (kdb_dbbe != NULL) {
|
||||
strncpy(buf, kdb_dbbe->dbbe_name, sizeof(buf));
|
||||
buf[sizeof(buf) - 1] = '\0';
|
||||
} else
|
||||
if (kdb_dbbe != NULL)
|
||||
strlcpy(buf, kdb_dbbe->dbbe_name, sizeof(buf));
|
||||
else
|
||||
*buf = '\0';
|
||||
error = sysctl_handle_string(oidp, buf, sizeof(buf), req);
|
||||
if (error != 0 || req->newptr == NULL)
|
||||
@ -513,13 +497,15 @@ kdb_thr_select(struct thread *thr)
|
||||
int
|
||||
kdb_trap(int type, int code, struct trapframe *tf)
|
||||
{
|
||||
struct kdb_dbbe *be;
|
||||
register_t intr;
|
||||
#ifdef SMP
|
||||
int did_stop_cpus;
|
||||
#endif
|
||||
int handled;
|
||||
|
||||
if (kdb_dbbe == NULL || kdb_dbbe->dbbe_trap == NULL)
|
||||
be = kdb_dbbe;
|
||||
if (be == NULL || be->dbbe_trap == NULL)
|
||||
return (0);
|
||||
|
||||
/* We reenter the debugger through kdb_reenter(). */
|
||||
@ -543,7 +529,15 @@ kdb_trap(int type, int code, struct trapframe *tf)
|
||||
makectx(tf, &kdb_pcb);
|
||||
kdb_thr_select(curthread);
|
||||
|
||||
handled = kdb_dbbe->dbbe_trap(type, code);
|
||||
for (;;) {
|
||||
handled = be->dbbe_trap(type, code);
|
||||
if (be == kdb_dbbe)
|
||||
break;
|
||||
be = kdb_dbbe;
|
||||
if (be == NULL || be->dbbe_trap == NULL)
|
||||
break;
|
||||
printf("Switching to %s back-end\n", be->dbbe_name);
|
||||
}
|
||||
|
||||
kdb_active--;
|
||||
|
||||
|
@ -70,7 +70,7 @@ __FBSDID("$FreeBSD$");
|
||||
#define VFS_MOUNTARG_SIZE_MAX (1024 * 64)
|
||||
|
||||
static int vfs_domount(struct thread *td, const char *fstype,
|
||||
char *fspath, int fsflags, void *fsdata);
|
||||
char *fspath, int fsflags, struct vfsoptlist **optlist);
|
||||
static void free_mntarg(struct mntarg *ma);
|
||||
|
||||
static int usermount = 0;
|
||||
@ -667,7 +667,7 @@ vfs_donmount(struct thread *td, int fsflags, struct uio *fsoptions)
|
||||
goto bail;
|
||||
}
|
||||
|
||||
error = vfs_domount(td, fstype, fspath, fsflags, optlist);
|
||||
error = vfs_domount(td, fstype, fspath, fsflags, &optlist);
|
||||
bail:
|
||||
/* copyout the errmsg */
|
||||
if (errmsg_pos != -1 && ((2 * errmsg_pos + 1) < fsoptions->uio_iovcnt)
|
||||
@ -683,7 +683,7 @@ vfs_donmount(struct thread *td, int fsflags, struct uio *fsoptions)
|
||||
}
|
||||
}
|
||||
|
||||
if (error != 0)
|
||||
if (optlist != NULL)
|
||||
vfs_freeopts(optlist);
|
||||
return (error);
|
||||
}
|
||||
@ -762,12 +762,12 @@ mount(td, uap)
|
||||
*/
|
||||
static int
|
||||
vfs_domount_first(
|
||||
struct thread *td, /* Calling thread. */
|
||||
struct vfsconf *vfsp, /* File system type. */
|
||||
char *fspath, /* Mount path. */
|
||||
struct vnode *vp, /* Vnode to be covered. */
|
||||
int fsflags, /* Flags common to all filesystems. */
|
||||
void *fsdata /* Options local to the filesystem. */
|
||||
struct thread *td, /* Calling thread. */
|
||||
struct vfsconf *vfsp, /* File system type. */
|
||||
char *fspath, /* Mount path. */
|
||||
struct vnode *vp, /* Vnode to be covered. */
|
||||
int fsflags, /* Flags common to all filesystems. */
|
||||
struct vfsoptlist **optlist /* Options local to the filesystem. */
|
||||
)
|
||||
{
|
||||
struct vattr va;
|
||||
@ -807,7 +807,7 @@ vfs_domount_first(
|
||||
/* Allocate and initialize the filesystem. */
|
||||
mp = vfs_mount_alloc(vp, vfsp, fspath, td->td_ucred);
|
||||
/* XXXMAC: pass to vfs_mount_alloc? */
|
||||
mp->mnt_optnew = fsdata;
|
||||
mp->mnt_optnew = *optlist;
|
||||
/* Set the mount level flags. */
|
||||
mp->mnt_flag = (fsflags & (MNT_UPDATEMASK | MNT_ROOTFS | MNT_RDONLY));
|
||||
|
||||
@ -830,6 +830,7 @@ vfs_domount_first(
|
||||
if (mp->mnt_opt != NULL)
|
||||
vfs_freeopts(mp->mnt_opt);
|
||||
mp->mnt_opt = mp->mnt_optnew;
|
||||
*optlist = NULL;
|
||||
(void)VFS_STATFS(mp, &mp->mnt_stat);
|
||||
|
||||
/*
|
||||
@ -872,16 +873,16 @@ vfs_domount_first(
|
||||
*/
|
||||
static int
|
||||
vfs_domount_update(
|
||||
struct thread *td, /* Calling thread. */
|
||||
struct vnode *vp, /* Mount point vnode. */
|
||||
int fsflags, /* Flags common to all filesystems. */
|
||||
void *fsdata /* Options local to the filesystem. */
|
||||
struct thread *td, /* Calling thread. */
|
||||
struct vnode *vp, /* Mount point vnode. */
|
||||
int fsflags, /* Flags common to all filesystems. */
|
||||
struct vfsoptlist **optlist /* Options local to the filesystem. */
|
||||
)
|
||||
{
|
||||
struct oexport_args oexport;
|
||||
struct export_args export;
|
||||
struct mount *mp;
|
||||
int error, flag;
|
||||
int error, export_error, flag;
|
||||
|
||||
mtx_assert(&Giant, MA_OWNED);
|
||||
ASSERT_VOP_ELOCKED(vp, __func__);
|
||||
@ -932,7 +933,7 @@ vfs_domount_update(
|
||||
if ((mp->mnt_flag & MNT_ASYNC) == 0)
|
||||
mp->mnt_kern_flag &= ~MNTK_ASYNC;
|
||||
MNT_IUNLOCK(mp);
|
||||
mp->mnt_optnew = fsdata;
|
||||
mp->mnt_optnew = *optlist;
|
||||
vfs_mergeopts(mp->mnt_optnew, mp->mnt_opt);
|
||||
|
||||
/*
|
||||
@ -942,11 +943,12 @@ vfs_domount_update(
|
||||
*/
|
||||
error = VFS_MOUNT(mp);
|
||||
|
||||
export_error = 0;
|
||||
if (error == 0) {
|
||||
/* Process the export option. */
|
||||
if (vfs_copyopt(mp->mnt_optnew, "export", &export,
|
||||
sizeof(export)) == 0) {
|
||||
error = vfs_export(mp, &export);
|
||||
export_error = vfs_export(mp, &export);
|
||||
} else if (vfs_copyopt(mp->mnt_optnew, "export", &oexport,
|
||||
sizeof(oexport)) == 0) {
|
||||
export.ex_flags = oexport.ex_flags;
|
||||
@ -958,7 +960,7 @@ vfs_domount_update(
|
||||
export.ex_masklen = oexport.ex_masklen;
|
||||
export.ex_indexfile = oexport.ex_indexfile;
|
||||
export.ex_numsecflavors = 0;
|
||||
error = vfs_export(mp, &export);
|
||||
export_error = vfs_export(mp, &export);
|
||||
}
|
||||
}
|
||||
|
||||
@ -988,6 +990,7 @@ vfs_domount_update(
|
||||
if (mp->mnt_opt != NULL)
|
||||
vfs_freeopts(mp->mnt_opt);
|
||||
mp->mnt_opt = mp->mnt_optnew;
|
||||
*optlist = NULL;
|
||||
(void)VFS_STATFS(mp, &mp->mnt_stat);
|
||||
/*
|
||||
* Prevent external consumers of mount options from reading
|
||||
@ -1005,7 +1008,7 @@ vfs_domount_update(
|
||||
vp->v_iflag &= ~VI_MOUNT;
|
||||
VI_UNLOCK(vp);
|
||||
vrele(vp);
|
||||
return (error);
|
||||
return (error != 0 ? error : export_error);
|
||||
}
|
||||
|
||||
/*
|
||||
@ -1013,11 +1016,11 @@ vfs_domount_update(
|
||||
*/
|
||||
static int
|
||||
vfs_domount(
|
||||
struct thread *td, /* Calling thread. */
|
||||
const char *fstype, /* Filesystem type. */
|
||||
char *fspath, /* Mount path. */
|
||||
int fsflags, /* Flags common to all filesystems. */
|
||||
void *fsdata /* Options local to the filesystem. */
|
||||
struct thread *td, /* Calling thread. */
|
||||
const char *fstype, /* Filesystem type. */
|
||||
char *fspath, /* Mount path. */
|
||||
int fsflags, /* Flags common to all filesystems. */
|
||||
struct vfsoptlist **optlist /* Options local to the filesystem. */
|
||||
)
|
||||
{
|
||||
struct vfsconf *vfsp;
|
||||
@ -1087,9 +1090,9 @@ vfs_domount(
|
||||
vp = nd.ni_vp;
|
||||
if ((fsflags & MNT_UPDATE) == 0) {
|
||||
error = vfs_domount_first(td, vfsp, fspath, vp, fsflags,
|
||||
fsdata);
|
||||
optlist);
|
||||
} else {
|
||||
error = vfs_domount_update(td, vp, fsflags, fsdata);
|
||||
error = vfs_domount_update(td, vp, fsflags, optlist);
|
||||
}
|
||||
mtx_unlock(&Giant);
|
||||
|
||||
|
@ -566,7 +566,11 @@ sysctl_sctp_check(SYSCTL_HANDLER_ARGS)
|
||||
{
|
||||
int error;
|
||||
|
||||
#ifdef VIMAGE
|
||||
error = vnet_sysctl_handle_int(oidp, oidp->oid_arg1, oidp->oid_arg2, req);
|
||||
#else
|
||||
error = sysctl_handle_int(oidp, oidp->oid_arg1, oidp->oid_arg2, req);
|
||||
#endif
|
||||
if (error == 0) {
|
||||
RANGECHK(SCTP_BASE_SYSCTL(sctp_sendspace), SCTPCTL_MAXDGRAM_MIN, SCTPCTL_MAXDGRAM_MAX);
|
||||
RANGECHK(SCTP_BASE_SYSCTL(sctp_recvspace), SCTPCTL_RECVSPACE_MIN, SCTPCTL_RECVSPACE_MAX);
|
||||
@ -828,301 +832,298 @@ sysctl_sctp_cleartrace(SYSCTL_HANDLER_ARGS)
|
||||
* sysctl definitions
|
||||
*/
|
||||
|
||||
SYSCTL_PROC(_net_inet_sctp, OID_AUTO, sendspace, CTLTYPE_UINT | CTLFLAG_RW,
|
||||
SYSCTL_VNET_PROC(_net_inet_sctp, OID_AUTO, sendspace, CTLTYPE_UINT | CTLFLAG_RW,
|
||||
&SCTP_BASE_SYSCTL(sctp_sendspace), 0, sysctl_sctp_check, "IU",
|
||||
SCTPCTL_MAXDGRAM_DESC);
|
||||
|
||||
SYSCTL_PROC(_net_inet_sctp, OID_AUTO, recvspace, CTLTYPE_UINT | CTLFLAG_RW,
|
||||
SYSCTL_VNET_PROC(_net_inet_sctp, OID_AUTO, recvspace, CTLTYPE_UINT | CTLFLAG_RW,
|
||||
&SCTP_BASE_SYSCTL(sctp_recvspace), 0, sysctl_sctp_check, "IU",
|
||||
SCTPCTL_RECVSPACE_DESC);
|
||||
|
||||
SYSCTL_PROC(_net_inet_sctp, OID_AUTO, auto_asconf, CTLTYPE_UINT | CTLFLAG_RW,
|
||||
SYSCTL_VNET_PROC(_net_inet_sctp, OID_AUTO, auto_asconf, CTLTYPE_UINT | CTLFLAG_RW,
|
||||
&SCTP_BASE_SYSCTL(sctp_auto_asconf), 0, sysctl_sctp_check, "IU",
|
||||
SCTPCTL_AUTOASCONF_DESC);
|
||||
|
||||
SYSCTL_PROC(_net_inet_sctp, OID_AUTO, ecn_enable, CTLTYPE_UINT | CTLFLAG_RW,
|
||||
SYSCTL_VNET_PROC(_net_inet_sctp, OID_AUTO, ecn_enable, CTLTYPE_UINT | CTLFLAG_RW,
|
||||
&SCTP_BASE_SYSCTL(sctp_ecn_enable), 0, sysctl_sctp_check, "IU",
|
||||
SCTPCTL_ECN_ENABLE_DESC);
|
||||
|
||||
SYSCTL_PROC(_net_inet_sctp, OID_AUTO, strict_sacks, CTLTYPE_UINT | CTLFLAG_RW,
|
||||
SYSCTL_VNET_PROC(_net_inet_sctp, OID_AUTO, strict_sacks, CTLTYPE_UINT | CTLFLAG_RW,
|
||||
&SCTP_BASE_SYSCTL(sctp_strict_sacks), 0, sysctl_sctp_check, "IU",
|
||||
SCTPCTL_STRICT_SACKS_DESC);
|
||||
|
||||
#if !defined(SCTP_WITH_NO_CSUM)
|
||||
SYSCTL_PROC(_net_inet_sctp, OID_AUTO, loopback_nocsum, CTLTYPE_UINT | CTLFLAG_RW,
|
||||
SYSCTL_VNET_PROC(_net_inet_sctp, OID_AUTO, loopback_nocsum, CTLTYPE_UINT | CTLFLAG_RW,
|
||||
&SCTP_BASE_SYSCTL(sctp_no_csum_on_loopback), 0, sysctl_sctp_check, "IU",
|
||||
SCTPCTL_LOOPBACK_NOCSUM_DESC);
|
||||
#endif
|
||||
|
||||
SYSCTL_PROC(_net_inet_sctp, OID_AUTO, strict_init, CTLTYPE_UINT | CTLFLAG_RW,
|
||||
SYSCTL_VNET_PROC(_net_inet_sctp, OID_AUTO, strict_init, CTLTYPE_UINT | CTLFLAG_RW,
|
||||
&SCTP_BASE_SYSCTL(sctp_strict_init), 0, sysctl_sctp_check, "IU",
|
||||
SCTPCTL_STRICT_INIT_DESC);
|
||||
|
||||
SYSCTL_PROC(_net_inet_sctp, OID_AUTO, peer_chkoh, CTLTYPE_UINT | CTLFLAG_RW,
|
||||
SYSCTL_VNET_PROC(_net_inet_sctp, OID_AUTO, peer_chkoh, CTLTYPE_UINT | CTLFLAG_RW,
|
||||
&SCTP_BASE_SYSCTL(sctp_peer_chunk_oh), 0, sysctl_sctp_check, "IU",
|
||||
SCTPCTL_PEER_CHKOH_DESC);
|
||||
|
||||
SYSCTL_PROC(_net_inet_sctp, OID_AUTO, maxburst, CTLTYPE_UINT | CTLFLAG_RW,
|
||||
SYSCTL_VNET_PROC(_net_inet_sctp, OID_AUTO, maxburst, CTLTYPE_UINT | CTLFLAG_RW,
|
||||
&SCTP_BASE_SYSCTL(sctp_max_burst_default), 0, sysctl_sctp_check, "IU",
|
||||
SCTPCTL_MAXBURST_DESC);
|
||||
|
||||
SYSCTL_PROC(_net_inet_sctp, OID_AUTO, fr_maxburst, CTLTYPE_UINT | CTLFLAG_RW,
|
||||
SYSCTL_VNET_PROC(_net_inet_sctp, OID_AUTO, fr_maxburst, CTLTYPE_UINT | CTLFLAG_RW,
|
||||
&SCTP_BASE_SYSCTL(sctp_fr_max_burst_default), 0, sysctl_sctp_check, "IU",
|
||||
SCTPCTL_FRMAXBURST_DESC);
|
||||
|
||||
SYSCTL_PROC(_net_inet_sctp, OID_AUTO, maxchunks, CTLTYPE_UINT | CTLFLAG_RW,
|
||||
SYSCTL_VNET_PROC(_net_inet_sctp, OID_AUTO, maxchunks, CTLTYPE_UINT | CTLFLAG_RW,
|
||||
&SCTP_BASE_SYSCTL(sctp_max_chunks_on_queue), 0, sysctl_sctp_check, "IU",
|
||||
SCTPCTL_MAXCHUNKS_DESC);
|
||||
|
||||
SYSCTL_PROC(_net_inet_sctp, OID_AUTO, tcbhashsize, CTLTYPE_UINT | CTLFLAG_RW,
|
||||
SYSCTL_VNET_PROC(_net_inet_sctp, OID_AUTO, tcbhashsize, CTLTYPE_UINT | CTLFLAG_RW,
|
||||
&SCTP_BASE_SYSCTL(sctp_hashtblsize), 0, sysctl_sctp_check, "IU",
|
||||
SCTPCTL_TCBHASHSIZE_DESC);
|
||||
|
||||
SYSCTL_PROC(_net_inet_sctp, OID_AUTO, pcbhashsize, CTLTYPE_UINT | CTLFLAG_RW,
|
||||
SYSCTL_VNET_PROC(_net_inet_sctp, OID_AUTO, pcbhashsize, CTLTYPE_UINT | CTLFLAG_RW,
|
||||
&SCTP_BASE_SYSCTL(sctp_pcbtblsize), 0, sysctl_sctp_check, "IU",
|
||||
SCTPCTL_PCBHASHSIZE_DESC);
|
||||
|
||||
SYSCTL_PROC(_net_inet_sctp, OID_AUTO, min_split_point, CTLTYPE_UINT | CTLFLAG_RW,
|
||||
SYSCTL_VNET_PROC(_net_inet_sctp, OID_AUTO, min_split_point, CTLTYPE_UINT | CTLFLAG_RW,
|
||||
&SCTP_BASE_SYSCTL(sctp_min_split_point), 0, sysctl_sctp_check, "IU",
|
||||
SCTPCTL_MIN_SPLIT_POINT_DESC);
|
||||
|
||||
SYSCTL_PROC(_net_inet_sctp, OID_AUTO, chunkscale, CTLTYPE_UINT | CTLFLAG_RW,
|
||||
SYSCTL_VNET_PROC(_net_inet_sctp, OID_AUTO, chunkscale, CTLTYPE_UINT | CTLFLAG_RW,
|
||||
&SCTP_BASE_SYSCTL(sctp_chunkscale), 0, sysctl_sctp_check, "IU",
|
||||
SCTPCTL_CHUNKSCALE_DESC);
|
||||
|
||||
SYSCTL_PROC(_net_inet_sctp, OID_AUTO, delayed_sack_time, CTLTYPE_UINT | CTLFLAG_RW,
|
||||
SYSCTL_VNET_PROC(_net_inet_sctp, OID_AUTO, delayed_sack_time, CTLTYPE_UINT | CTLFLAG_RW,
|
||||
&SCTP_BASE_SYSCTL(sctp_delayed_sack_time_default), 0, sysctl_sctp_check, "IU",
|
||||
SCTPCTL_DELAYED_SACK_TIME_DESC);
|
||||
|
||||
SYSCTL_PROC(_net_inet_sctp, OID_AUTO, sack_freq, CTLTYPE_UINT | CTLFLAG_RW,
|
||||
SYSCTL_VNET_PROC(_net_inet_sctp, OID_AUTO, sack_freq, CTLTYPE_UINT | CTLFLAG_RW,
|
||||
&SCTP_BASE_SYSCTL(sctp_sack_freq_default), 0, sysctl_sctp_check, "IU",
|
||||
SCTPCTL_SACK_FREQ_DESC);
|
||||
|
||||
SYSCTL_PROC(_net_inet_sctp, OID_AUTO, sys_resource, CTLTYPE_UINT | CTLFLAG_RW,
|
||||
SYSCTL_VNET_PROC(_net_inet_sctp, OID_AUTO, sys_resource, CTLTYPE_UINT | CTLFLAG_RW,
|
||||
&SCTP_BASE_SYSCTL(sctp_system_free_resc_limit), 0, sysctl_sctp_check, "IU",
|
||||
SCTPCTL_SYS_RESOURCE_DESC);
|
||||
|
||||
SYSCTL_PROC(_net_inet_sctp, OID_AUTO, asoc_resource, CTLTYPE_UINT | CTLFLAG_RW,
|
||||
SYSCTL_VNET_PROC(_net_inet_sctp, OID_AUTO, asoc_resource, CTLTYPE_UINT | CTLFLAG_RW,
|
||||
&SCTP_BASE_SYSCTL(sctp_asoc_free_resc_limit), 0, sysctl_sctp_check, "IU",
|
||||
SCTPCTL_ASOC_RESOURCE_DESC);
|
||||
|
||||
SYSCTL_PROC(_net_inet_sctp, OID_AUTO, heartbeat_interval, CTLTYPE_UINT | CTLFLAG_RW,
|
||||
SYSCTL_VNET_PROC(_net_inet_sctp, OID_AUTO, heartbeat_interval, CTLTYPE_UINT | CTLFLAG_RW,
|
||||
&SCTP_BASE_SYSCTL(sctp_heartbeat_interval_default), 0, sysctl_sctp_check, "IU",
|
||||
SCTPCTL_HEARTBEAT_INTERVAL_DESC);
|
||||
|
||||
SYSCTL_PROC(_net_inet_sctp, OID_AUTO, pmtu_raise_time, CTLTYPE_UINT | CTLFLAG_RW,
|
||||
SYSCTL_VNET_PROC(_net_inet_sctp, OID_AUTO, pmtu_raise_time, CTLTYPE_UINT | CTLFLAG_RW,
|
||||
&SCTP_BASE_SYSCTL(sctp_pmtu_raise_time_default), 0, sysctl_sctp_check, "IU",
|
||||
SCTPCTL_PMTU_RAISE_TIME_DESC);
|
||||
|
||||
SYSCTL_PROC(_net_inet_sctp, OID_AUTO, shutdown_guard_time, CTLTYPE_UINT | CTLFLAG_RW,
|
||||
SYSCTL_VNET_PROC(_net_inet_sctp, OID_AUTO, shutdown_guard_time, CTLTYPE_UINT | CTLFLAG_RW,
|
||||
&SCTP_BASE_SYSCTL(sctp_shutdown_guard_time_default), 0, sysctl_sctp_check, "IU",
|
||||
SCTPCTL_SHUTDOWN_GUARD_TIME_DESC);
|
||||
|
||||
SYSCTL_PROC(_net_inet_sctp, OID_AUTO, secret_lifetime, CTLTYPE_UINT | CTLFLAG_RW,
|
||||
SYSCTL_VNET_PROC(_net_inet_sctp, OID_AUTO, secret_lifetime, CTLTYPE_UINT | CTLFLAG_RW,
|
||||
&SCTP_BASE_SYSCTL(sctp_secret_lifetime_default), 0, sysctl_sctp_check, "IU",
|
||||
SCTPCTL_SECRET_LIFETIME_DESC);
|
||||
|
||||
SYSCTL_PROC(_net_inet_sctp, OID_AUTO, rto_max, CTLTYPE_UINT | CTLFLAG_RW,
|
||||
SYSCTL_VNET_PROC(_net_inet_sctp, OID_AUTO, rto_max, CTLTYPE_UINT | CTLFLAG_RW,
|
||||
&SCTP_BASE_SYSCTL(sctp_rto_max_default), 0, sysctl_sctp_check, "IU",
|
||||
SCTPCTL_RTO_MAX_DESC);
|
||||
|
||||
SYSCTL_PROC(_net_inet_sctp, OID_AUTO, rto_min, CTLTYPE_UINT | CTLFLAG_RW,
|
||||
SYSCTL_VNET_PROC(_net_inet_sctp, OID_AUTO, rto_min, CTLTYPE_UINT | CTLFLAG_RW,
|
||||
&SCTP_BASE_SYSCTL(sctp_rto_min_default), 0, sysctl_sctp_check, "IU",
|
||||
SCTPCTL_RTO_MIN_DESC);
|
||||
|
||||
SYSCTL_PROC(_net_inet_sctp, OID_AUTO, rto_initial, CTLTYPE_UINT | CTLFLAG_RW,
|
||||
SYSCTL_VNET_PROC(_net_inet_sctp, OID_AUTO, rto_initial, CTLTYPE_UINT | CTLFLAG_RW,
|
||||
&SCTP_BASE_SYSCTL(sctp_rto_initial_default), 0, sysctl_sctp_check, "IU",
|
||||
SCTPCTL_RTO_INITIAL_DESC);
|
||||
|
||||
SYSCTL_PROC(_net_inet_sctp, OID_AUTO, init_rto_max, CTLTYPE_UINT | CTLFLAG_RW,
|
||||
SYSCTL_VNET_PROC(_net_inet_sctp, OID_AUTO, init_rto_max, CTLTYPE_UINT | CTLFLAG_RW,
|
||||
&SCTP_BASE_SYSCTL(sctp_init_rto_max_default), 0, sysctl_sctp_check, "IU",
|
||||
SCTPCTL_INIT_RTO_MAX_DESC);
|
||||
|
||||
SYSCTL_PROC(_net_inet_sctp, OID_AUTO, valid_cookie_life, CTLTYPE_UINT | CTLFLAG_RW,
|
||||
SYSCTL_VNET_PROC(_net_inet_sctp, OID_AUTO, valid_cookie_life, CTLTYPE_UINT | CTLFLAG_RW,
|
||||
&SCTP_BASE_SYSCTL(sctp_valid_cookie_life_default), 0, sysctl_sctp_check, "IU",
|
||||
SCTPCTL_VALID_COOKIE_LIFE_DESC);
|
||||
|
||||
SYSCTL_PROC(_net_inet_sctp, OID_AUTO, init_rtx_max, CTLTYPE_UINT | CTLFLAG_RW,
|
||||
SYSCTL_VNET_PROC(_net_inet_sctp, OID_AUTO, init_rtx_max, CTLTYPE_UINT | CTLFLAG_RW,
|
||||
&SCTP_BASE_SYSCTL(sctp_init_rtx_max_default), 0, sysctl_sctp_check, "IU",
|
||||
SCTPCTL_INIT_RTX_MAX_DESC);
|
||||
|
||||
SYSCTL_PROC(_net_inet_sctp, OID_AUTO, assoc_rtx_max, CTLTYPE_UINT | CTLFLAG_RW,
|
||||
SYSCTL_VNET_PROC(_net_inet_sctp, OID_AUTO, assoc_rtx_max, CTLTYPE_UINT | CTLFLAG_RW,
|
||||
&SCTP_BASE_SYSCTL(sctp_assoc_rtx_max_default), 0, sysctl_sctp_check, "IU",
|
||||
SCTPCTL_ASSOC_RTX_MAX_DESC);
|
||||
|
||||
SYSCTL_PROC(_net_inet_sctp, OID_AUTO, path_rtx_max, CTLTYPE_UINT | CTLFLAG_RW,
|
||||
SYSCTL_VNET_PROC(_net_inet_sctp, OID_AUTO, path_rtx_max, CTLTYPE_UINT | CTLFLAG_RW,
|
||||
&SCTP_BASE_SYSCTL(sctp_path_rtx_max_default), 0, sysctl_sctp_check, "IU",
|
||||
SCTPCTL_PATH_RTX_MAX_DESC);
|
||||
|
||||
SYSCTL_PROC(_net_inet_sctp, OID_AUTO, add_more_on_output, CTLTYPE_UINT | CTLFLAG_RW,
|
||||
SYSCTL_VNET_PROC(_net_inet_sctp, OID_AUTO, add_more_on_output, CTLTYPE_UINT | CTLFLAG_RW,
|
||||
&SCTP_BASE_SYSCTL(sctp_add_more_threshold), 0, sysctl_sctp_check, "IU",
|
||||
SCTPCTL_ADD_MORE_ON_OUTPUT_DESC);
|
||||
|
||||
SYSCTL_PROC(_net_inet_sctp, OID_AUTO, outgoing_streams, CTLTYPE_UINT | CTLFLAG_RW,
|
||||
SYSCTL_VNET_PROC(_net_inet_sctp, OID_AUTO, outgoing_streams, CTLTYPE_UINT | CTLFLAG_RW,
|
||||
&SCTP_BASE_SYSCTL(sctp_nr_outgoing_streams_default), 0, sysctl_sctp_check, "IU",
|
||||
SCTPCTL_OUTGOING_STREAMS_DESC);
|
||||
|
||||
SYSCTL_PROC(_net_inet_sctp, OID_AUTO, cmt_on_off, CTLTYPE_UINT | CTLFLAG_RW,
|
||||
SYSCTL_VNET_PROC(_net_inet_sctp, OID_AUTO, cmt_on_off, CTLTYPE_UINT | CTLFLAG_RW,
|
||||
&SCTP_BASE_SYSCTL(sctp_cmt_on_off), 0, sysctl_sctp_check, "IU",
|
||||
SCTPCTL_CMT_ON_OFF_DESC);
|
||||
|
||||
/* EY */
|
||||
SYSCTL_PROC(_net_inet_sctp, OID_AUTO, nr_sack_on_off, CTLTYPE_UINT | CTLFLAG_RW,
|
||||
SYSCTL_VNET_PROC(_net_inet_sctp, OID_AUTO, nr_sack_on_off, CTLTYPE_UINT | CTLFLAG_RW,
|
||||
&SCTP_BASE_SYSCTL(sctp_nr_sack_on_off), 0, sysctl_sctp_check, "IU",
|
||||
SCTPCTL_NR_SACK_ON_OFF_DESC);
|
||||
|
||||
SYSCTL_PROC(_net_inet_sctp, OID_AUTO, cmt_use_dac, CTLTYPE_UINT | CTLFLAG_RW,
|
||||
SYSCTL_VNET_PROC(_net_inet_sctp, OID_AUTO, cmt_use_dac, CTLTYPE_UINT | CTLFLAG_RW,
|
||||
&SCTP_BASE_SYSCTL(sctp_cmt_use_dac), 0, sysctl_sctp_check, "IU",
|
||||
SCTPCTL_CMT_USE_DAC_DESC);
|
||||
|
||||
SYSCTL_PROC(_net_inet_sctp, OID_AUTO, cmt_pf, CTLTYPE_UINT | CTLFLAG_RW,
|
||||
SYSCTL_VNET_PROC(_net_inet_sctp, OID_AUTO, cmt_pf, CTLTYPE_UINT | CTLFLAG_RW,
|
||||
&SCTP_BASE_SYSCTL(sctp_cmt_pf), 0, sysctl_sctp_check, "IU",
|
||||
SCTPCTL_CMT_PF_DESC);
|
||||
|
||||
SYSCTL_PROC(_net_inet_sctp, OID_AUTO, cwnd_maxburst, CTLTYPE_UINT | CTLFLAG_RW,
|
||||
SYSCTL_VNET_PROC(_net_inet_sctp, OID_AUTO, cwnd_maxburst, CTLTYPE_UINT | CTLFLAG_RW,
|
||||
&SCTP_BASE_SYSCTL(sctp_use_cwnd_based_maxburst), 0, sysctl_sctp_check, "IU",
|
||||
SCTPCTL_CWND_MAXBURST_DESC);
|
||||
|
||||
SYSCTL_PROC(_net_inet_sctp, OID_AUTO, early_fast_retran, CTLTYPE_UINT | CTLFLAG_RW,
|
||||
SYSCTL_VNET_PROC(_net_inet_sctp, OID_AUTO, early_fast_retran, CTLTYPE_UINT | CTLFLAG_RW,
|
||||
&SCTP_BASE_SYSCTL(sctp_early_fr), 0, sysctl_sctp_check, "IU",
|
||||
SCTPCTL_EARLY_FAST_RETRAN_DESC);
|
||||
|
||||
SYSCTL_PROC(_net_inet_sctp, OID_AUTO, early_fast_retran_msec, CTLTYPE_UINT | CTLFLAG_RW,
|
||||
SYSCTL_VNET_PROC(_net_inet_sctp, OID_AUTO, early_fast_retran_msec, CTLTYPE_UINT | CTLFLAG_RW,
|
||||
&SCTP_BASE_SYSCTL(sctp_early_fr_msec), 0, sysctl_sctp_check, "IU",
|
||||
SCTPCTL_EARLY_FAST_RETRAN_MSEC_DESC);
|
||||
|
||||
SYSCTL_PROC(_net_inet_sctp, OID_AUTO, asconf_auth_nochk, CTLTYPE_UINT | CTLFLAG_RW,
|
||||
SYSCTL_VNET_PROC(_net_inet_sctp, OID_AUTO, asconf_auth_nochk, CTLTYPE_UINT | CTLFLAG_RW,
|
||||
&SCTP_BASE_SYSCTL(sctp_asconf_auth_nochk), 0, sysctl_sctp_check, "IU",
|
||||
SCTPCTL_ASCONF_AUTH_NOCHK_DESC);
|
||||
|
||||
SYSCTL_PROC(_net_inet_sctp, OID_AUTO, auth_disable, CTLTYPE_UINT | CTLFLAG_RW,
|
||||
SYSCTL_VNET_PROC(_net_inet_sctp, OID_AUTO, auth_disable, CTLTYPE_UINT | CTLFLAG_RW,
|
||||
&SCTP_BASE_SYSCTL(sctp_auth_disable), 0, sysctl_sctp_check, "IU",
|
||||
SCTPCTL_AUTH_DISABLE_DESC);
|
||||
|
||||
SYSCTL_PROC(_net_inet_sctp, OID_AUTO, nat_friendly, CTLTYPE_UINT | CTLFLAG_RW,
|
||||
SYSCTL_VNET_PROC(_net_inet_sctp, OID_AUTO, nat_friendly, CTLTYPE_UINT | CTLFLAG_RW,
|
||||
&SCTP_BASE_SYSCTL(sctp_nat_friendly), 0, sysctl_sctp_check, "IU",
|
||||
SCTPCTL_NAT_FRIENDLY_DESC);
|
||||
|
||||
SYSCTL_PROC(_net_inet_sctp, OID_AUTO, abc_l_var, CTLTYPE_UINT | CTLFLAG_RW,
|
||||
SYSCTL_VNET_PROC(_net_inet_sctp, OID_AUTO, abc_l_var, CTLTYPE_UINT | CTLFLAG_RW,
|
||||
&SCTP_BASE_SYSCTL(sctp_L2_abc_variable), 0, sysctl_sctp_check, "IU",
|
||||
SCTPCTL_ABC_L_VAR_DESC);
|
||||
|
||||
SYSCTL_PROC(_net_inet_sctp, OID_AUTO, max_chained_mbufs, CTLTYPE_UINT | CTLFLAG_RW,
|
||||
SYSCTL_VNET_PROC(_net_inet_sctp, OID_AUTO, max_chained_mbufs, CTLTYPE_UINT | CTLFLAG_RW,
|
||||
&SCTP_BASE_SYSCTL(sctp_mbuf_threshold_count), 0, sysctl_sctp_check, "IU",
|
||||
SCTPCTL_MAX_CHAINED_MBUFS_DESC);
|
||||
|
||||
SYSCTL_PROC(_net_inet_sctp, OID_AUTO, do_sctp_drain, CTLTYPE_UINT | CTLFLAG_RW,
|
||||
SYSCTL_VNET_PROC(_net_inet_sctp, OID_AUTO, do_sctp_drain, CTLTYPE_UINT | CTLFLAG_RW,
|
||||
&SCTP_BASE_SYSCTL(sctp_do_drain), 0, sysctl_sctp_check, "IU",
|
||||
SCTPCTL_DO_SCTP_DRAIN_DESC);
|
||||
|
||||
SYSCTL_PROC(_net_inet_sctp, OID_AUTO, hb_max_burst, CTLTYPE_UINT | CTLFLAG_RW,
|
||||
SYSCTL_VNET_PROC(_net_inet_sctp, OID_AUTO, hb_max_burst, CTLTYPE_UINT | CTLFLAG_RW,
|
||||
&SCTP_BASE_SYSCTL(sctp_hb_maxburst), 0, sysctl_sctp_check, "IU",
|
||||
SCTPCTL_HB_MAX_BURST_DESC);
|
||||
|
||||
SYSCTL_PROC(_net_inet_sctp, OID_AUTO, abort_at_limit, CTLTYPE_UINT | CTLFLAG_RW,
|
||||
SYSCTL_VNET_PROC(_net_inet_sctp, OID_AUTO, abort_at_limit, CTLTYPE_UINT | CTLFLAG_RW,
|
||||
&SCTP_BASE_SYSCTL(sctp_abort_if_one_2_one_hits_limit), 0, sysctl_sctp_check, "IU",
|
||||
SCTPCTL_ABORT_AT_LIMIT_DESC);
|
||||
|
||||
SYSCTL_PROC(_net_inet_sctp, OID_AUTO, strict_data_order, CTLTYPE_UINT | CTLFLAG_RW,
|
||||
SYSCTL_VNET_PROC(_net_inet_sctp, OID_AUTO, strict_data_order, CTLTYPE_UINT | CTLFLAG_RW,
|
||||
&SCTP_BASE_SYSCTL(sctp_strict_data_order), 0, sysctl_sctp_check, "IU",
|
||||
SCTPCTL_STRICT_DATA_ORDER_DESC);
|
||||
|
||||
SYSCTL_PROC(_net_inet_sctp, OID_AUTO, min_residual, CTLTYPE_UINT | CTLFLAG_RW,
|
||||
SYSCTL_VNET_PROC(_net_inet_sctp, OID_AUTO, min_residual, CTLTYPE_UINT | CTLFLAG_RW,
|
||||
&SCTP_BASE_SYSCTL(sctp_min_residual), 0, sysctl_sctp_check, "IU",
|
||||
SCTPCTL_MIN_RESIDUAL_DESC);
|
||||
|
||||
SYSCTL_PROC(_net_inet_sctp, OID_AUTO, max_retran_chunk, CTLTYPE_UINT | CTLFLAG_RW,
|
||||
SYSCTL_VNET_PROC(_net_inet_sctp, OID_AUTO, max_retran_chunk, CTLTYPE_UINT | CTLFLAG_RW,
|
||||
&SCTP_BASE_SYSCTL(sctp_max_retran_chunk), 0, sysctl_sctp_check, "IU",
|
||||
SCTPCTL_MAX_RETRAN_CHUNK_DESC);
|
||||
|
||||
SYSCTL_PROC(_net_inet_sctp, OID_AUTO, log_level, CTLTYPE_UINT | CTLFLAG_RW,
|
||||
SYSCTL_VNET_PROC(_net_inet_sctp, OID_AUTO, log_level, CTLTYPE_UINT | CTLFLAG_RW,
|
||||
&SCTP_BASE_SYSCTL(sctp_logging_level), 0, sysctl_sctp_check, "IU",
|
||||
SCTPCTL_LOGGING_LEVEL_DESC);
|
||||
|
||||
SYSCTL_PROC(_net_inet_sctp, OID_AUTO, default_cc_module, CTLTYPE_UINT | CTLFLAG_RW,
|
||||
SYSCTL_VNET_PROC(_net_inet_sctp, OID_AUTO, default_cc_module, CTLTYPE_UINT | CTLFLAG_RW,
|
||||
&SCTP_BASE_SYSCTL(sctp_default_cc_module), 0, sysctl_sctp_check, "IU",
|
||||
SCTPCTL_DEFAULT_CC_MODULE_DESC);
|
||||
|
||||
SYSCTL_PROC(_net_inet_sctp, OID_AUTO, default_ss_module, CTLTYPE_UINT | CTLFLAG_RW,
|
||||
SYSCTL_VNET_PROC(_net_inet_sctp, OID_AUTO, default_ss_module, CTLTYPE_UINT | CTLFLAG_RW,
|
||||
&SCTP_BASE_SYSCTL(sctp_default_ss_module), 0, sysctl_sctp_check, "IU",
|
||||
SCTPCTL_DEFAULT_SS_MODULE_DESC);
|
||||
|
||||
SYSCTL_PROC(_net_inet_sctp, OID_AUTO, default_frag_interleave, CTLTYPE_UINT | CTLFLAG_RW,
|
||||
SYSCTL_VNET_PROC(_net_inet_sctp, OID_AUTO, default_frag_interleave, CTLTYPE_UINT | CTLFLAG_RW,
|
||||
&SCTP_BASE_SYSCTL(sctp_default_frag_interleave), 0, sysctl_sctp_check, "IU",
|
||||
SCTPCTL_DEFAULT_FRAG_INTERLEAVE_DESC);
|
||||
|
||||
SYSCTL_PROC(_net_inet_sctp, OID_AUTO, mobility_base, CTLTYPE_UINT | CTLFLAG_RW,
|
||||
SYSCTL_VNET_PROC(_net_inet_sctp, OID_AUTO, mobility_base, CTLTYPE_UINT | CTLFLAG_RW,
|
||||
&SCTP_BASE_SYSCTL(sctp_mobility_base), 0, sysctl_sctp_check, "IU",
|
||||
SCTPCTL_MOBILITY_BASE_DESC);
|
||||
|
||||
SYSCTL_PROC(_net_inet_sctp, OID_AUTO, mobility_fasthandoff, CTLTYPE_UINT | CTLFLAG_RW,
|
||||
SYSCTL_VNET_PROC(_net_inet_sctp, OID_AUTO, mobility_fasthandoff, CTLTYPE_UINT | CTLFLAG_RW,
|
||||
&SCTP_BASE_SYSCTL(sctp_mobility_fasthandoff), 0, sysctl_sctp_check, "IU",
|
||||
SCTPCTL_MOBILITY_FASTHANDOFF_DESC);
|
||||
|
||||
#if defined(SCTP_LOCAL_TRACE_BUF)
|
||||
SYSCTL_STRUCT(_net_inet_sctp, OID_AUTO, log, CTLFLAG_RD,
|
||||
SYSCTL_VNET_STRUCT(_net_inet_sctp, OID_AUTO, log, CTLFLAG_RD,
|
||||
&SCTP_BASE_SYSCTL(sctp_log), sctp_log,
|
||||
"SCTP logging (struct sctp_log)");
|
||||
|
||||
SYSCTL_PROC(_net_inet_sctp, OID_AUTO, clear_trace, CTLTYPE_UINT | CTLFLAG_RW,
|
||||
SYSCTL_VNET_PROC(_net_inet_sctp, OID_AUTO, clear_trace, CTLTYPE_UINT | CTLFLAG_RW,
|
||||
&SCTP_BASE_SYSCTL(sctp_log), 0, sysctl_sctp_cleartrace, "IU",
|
||||
"Clear SCTP Logging buffer");
|
||||
|
||||
|
||||
|
||||
#endif
|
||||
|
||||
SYSCTL_PROC(_net_inet_sctp, OID_AUTO, udp_tunneling_for_client_enable, CTLTYPE_UINT | CTLFLAG_RW,
|
||||
SYSCTL_VNET_PROC(_net_inet_sctp, OID_AUTO, udp_tunneling_for_client_enable, CTLTYPE_UINT | CTLFLAG_RW,
|
||||
&SCTP_BASE_SYSCTL(sctp_udp_tunneling_for_client_enable), 0, sysctl_sctp_check, "IU",
|
||||
SCTPCTL_UDP_TUNNELING_FOR_CLIENT_ENABLE_DESC);
|
||||
|
||||
SYSCTL_PROC(_net_inet_sctp, OID_AUTO, udp_tunneling_port, CTLTYPE_UINT | CTLFLAG_RW,
|
||||
SYSCTL_VNET_PROC(_net_inet_sctp, OID_AUTO, udp_tunneling_port, CTLTYPE_UINT | CTLFLAG_RW,
|
||||
&SCTP_BASE_SYSCTL(sctp_udp_tunneling_port), 0, sysctl_sctp_udp_tunneling_check, "IU",
|
||||
SCTPCTL_UDP_TUNNELING_PORT_DESC);
|
||||
|
||||
SYSCTL_PROC(_net_inet_sctp, OID_AUTO, enable_sack_immediately, CTLTYPE_UINT | CTLFLAG_RW,
|
||||
SYSCTL_VNET_PROC(_net_inet_sctp, OID_AUTO, enable_sack_immediately, CTLTYPE_UINT | CTLFLAG_RW,
|
||||
&SCTP_BASE_SYSCTL(sctp_enable_sack_immediately), 0, sysctl_sctp_check, "IU",
|
||||
SCTPCTL_SACK_IMMEDIATELY_ENABLE_DESC);
|
||||
|
||||
SYSCTL_PROC(_net_inet_sctp, OID_AUTO, nat_friendly_init, CTLTYPE_UINT | CTLFLAG_RW,
|
||||
SYSCTL_VNET_PROC(_net_inet_sctp, OID_AUTO, nat_friendly_init, CTLTYPE_UINT | CTLFLAG_RW,
|
||||
&SCTP_BASE_SYSCTL(sctp_inits_include_nat_friendly), 0, sysctl_sctp_check, "IU",
|
||||
SCTPCTL_NAT_FRIENDLY_INITS_DESC);
|
||||
|
||||
SYSCTL_PROC(_net_inet_sctp, OID_AUTO, vtag_time_wait, CTLTYPE_UINT | CTLFLAG_RW,
|
||||
SYSCTL_VNET_PROC(_net_inet_sctp, OID_AUTO, vtag_time_wait, CTLTYPE_UINT | CTLFLAG_RW,
|
||||
&SCTP_BASE_SYSCTL(sctp_vtag_time_wait), 0, sysctl_sctp_check, "IU",
|
||||
SCTPCTL_TIME_WAIT_DESC);
|
||||
|
||||
SYSCTL_PROC(_net_inet_sctp, OID_AUTO, buffer_splitting, CTLTYPE_UINT | CTLFLAG_RW,
|
||||
SYSCTL_VNET_PROC(_net_inet_sctp, OID_AUTO, buffer_splitting, CTLTYPE_UINT | CTLFLAG_RW,
|
||||
&SCTP_BASE_SYSCTL(sctp_buffer_splitting), 0, sysctl_sctp_check, "IU",
|
||||
SCTPCTL_BUFFER_SPLITTING_DESC);
|
||||
|
||||
SYSCTL_PROC(_net_inet_sctp, OID_AUTO, initial_cwnd, CTLTYPE_UINT | CTLFLAG_RW,
|
||||
SYSCTL_VNET_PROC(_net_inet_sctp, OID_AUTO, initial_cwnd, CTLTYPE_UINT | CTLFLAG_RW,
|
||||
&SCTP_BASE_SYSCTL(sctp_initial_cwnd), 0, sysctl_sctp_check, "IU",
|
||||
SCTPCTL_INITIAL_CWND_DESC);
|
||||
|
||||
#ifdef SCTP_DEBUG
|
||||
SYSCTL_PROC(_net_inet_sctp, OID_AUTO, debug, CTLTYPE_UINT | CTLFLAG_RW,
|
||||
SYSCTL_VNET_PROC(_net_inet_sctp, OID_AUTO, debug, CTLTYPE_UINT | CTLFLAG_RW,
|
||||
&SCTP_BASE_SYSCTL(sctp_debug_on), 0, sysctl_sctp_check, "IU",
|
||||
SCTPCTL_DEBUG_DESC);
|
||||
#endif /* SCTP_DEBUG */
|
||||
#endif
|
||||
|
||||
|
||||
#if defined (__APPLE__) || defined(SCTP_SO_LOCK_TESTING)
|
||||
SYSCTL_PROC(_net_inet_sctp, OID_AUTO, output_unlocked, CTLTYPE_UINT | CTLFLAG_RW,
|
||||
SYSCTL_VNET_PROC(_net_inet_sctp, OID_AUTO, output_unlocked, CTLTYPE_UINT | CTLFLAG_RW,
|
||||
&SCTP_BASE_SYSCTL(sctp_output_unlocked), 0, sysctl_sctp_check, "IU",
|
||||
SCTPCTL_OUTPUT_UNLOCKED_DESC);
|
||||
#endif
|
||||
|
||||
#if defined(__FreeBSD__) && defined(SMP) && defined(SCTP_USE_PERCPU_STAT)
|
||||
SYSCTL_PROC(_net_inet_sctp, OID_AUTO, stats,
|
||||
SYSCTL_VNET_PROC(_net_inet_sctp, OID_AUTO, stats,
|
||||
CTLTYPE_STRUCT | CTLFLAG_RW,
|
||||
0, 0, sysctl_stat_get, "S,sctpstat",
|
||||
"SCTP statistics (struct sctp_stat)");
|
||||
#else
|
||||
SYSCTL_STRUCT(_net_inet_sctp, OID_AUTO, stats, CTLFLAG_RW,
|
||||
SYSCTL_VNET_STRUCT(_net_inet_sctp, OID_AUTO, stats, CTLFLAG_RW,
|
||||
&SCTP_BASE_STATS_SYSCTL, sctpstat,
|
||||
"SCTP statistics (struct sctp_stat)");
|
||||
#endif
|
||||
|
||||
SYSCTL_PROC(_net_inet_sctp, OID_AUTO, assoclist, CTLTYPE_OPAQUE | CTLFLAG_RD,
|
||||
SYSCTL_VNET_PROC(_net_inet_sctp, OID_AUTO, assoclist, CTLTYPE_OPAQUE | CTLFLAG_RD,
|
||||
0, 0, sctp_assoclist,
|
||||
"S,xassoc", "List of active SCTP associations");
|
||||
|
@ -2458,6 +2458,13 @@ fill_regs(struct thread *td, struct reg *regs)
|
||||
|
||||
tp = td->td_frame;
|
||||
pcb = td->td_pcb;
|
||||
regs->r_gs = pcb->pcb_gs;
|
||||
return (fill_frame_regs(tp, regs));
|
||||
}
|
||||
|
||||
int
|
||||
fill_frame_regs(struct trapframe *tp, struct reg *regs)
|
||||
{
|
||||
regs->r_fs = tp->tf_fs;
|
||||
regs->r_es = tp->tf_es;
|
||||
regs->r_ds = tp->tf_ds;
|
||||
@ -2473,7 +2480,6 @@ fill_regs(struct thread *td, struct reg *regs)
|
||||
regs->r_eflags = tp->tf_eflags;
|
||||
regs->r_esp = tp->tf_esp;
|
||||
regs->r_ss = tp->tf_ss;
|
||||
regs->r_gs = pcb->pcb_gs;
|
||||
return (0);
|
||||
}
|
||||
|
||||
|
@ -174,7 +174,7 @@ ASENTRY(__start)
|
||||
insrdi 9,8,1,0
|
||||
mtmsrd 9
|
||||
|
||||
bl .OF_initial_setup
|
||||
bl OF_initial_setup
|
||||
nop
|
||||
|
||||
lis 4,end@ha
|
||||
@ -188,14 +188,14 @@ ASENTRY(__start)
|
||||
mr 6,20
|
||||
mr 7,21
|
||||
|
||||
bl .powerpc_init
|
||||
bl powerpc_init
|
||||
nop
|
||||
mr %r1, %r3
|
||||
li %r3, 0
|
||||
std %r3, 0(%r1)
|
||||
bl .mi_startup
|
||||
bl mi_startup
|
||||
nop
|
||||
b .OF_exit
|
||||
b OF_exit
|
||||
nop
|
||||
|
||||
/*
|
||||
|
@ -121,7 +121,7 @@ ENTRY(cpu_switch)
|
||||
/* Save FPU context if needed */
|
||||
andi. %r7, %r7, PCB_FPU
|
||||
beq .L1
|
||||
bl .save_fpu
|
||||
bl save_fpu
|
||||
nop
|
||||
|
||||
.L1:
|
||||
@ -130,12 +130,12 @@ ENTRY(cpu_switch)
|
||||
/* Save Altivec context if needed */
|
||||
andi. %r7, %r7, PCB_VEC
|
||||
beq .L2
|
||||
bl .save_vec
|
||||
bl save_vec
|
||||
nop
|
||||
|
||||
.L2:
|
||||
mr %r3,%r14 /* restore old thread ptr */
|
||||
bl .pmap_deactivate /* Deactivate the current pmap */
|
||||
bl pmap_deactivate /* Deactivate the current pmap */
|
||||
nop
|
||||
|
||||
addi %r1,%r1,48
|
||||
@ -161,7 +161,7 @@ blocked_loop:
|
||||
stdu %r1,-48(%r1)
|
||||
|
||||
mr %r3,%r15 /* Get new thread ptr */
|
||||
bl .pmap_activate /* Activate the new address space */
|
||||
bl pmap_activate /* Activate the new address space */
|
||||
nop
|
||||
|
||||
lwz %r6, PCB_FLAGS(%r17)
|
||||
@ -169,7 +169,7 @@ blocked_loop:
|
||||
andi. %r6, %r6, PCB_FPU
|
||||
beq .L3
|
||||
mr %r3,%r15 /* Pass curthread to enable_fpu */
|
||||
bl .enable_fpu
|
||||
bl enable_fpu
|
||||
nop
|
||||
|
||||
.L3:
|
||||
@ -178,7 +178,7 @@ blocked_loop:
|
||||
andi. %r6, %r6, PCB_VEC
|
||||
beq .L4
|
||||
mr %r3,%r15 /* Pass curthread to enable_vec */
|
||||
bl .enable_vec
|
||||
bl enable_vec
|
||||
nop
|
||||
|
||||
/* thread to restore is in r3 */
|
||||
@ -276,7 +276,7 @@ ENTRY(fork_trampoline)
|
||||
ld %r5,CF_ARG1(%r1)
|
||||
|
||||
stdu %r1,-48(%r1)
|
||||
bl .fork_exit
|
||||
bl fork_exit
|
||||
nop
|
||||
addi %r1,%r1,48+CF_SIZE-FSP /* Allow 8 bytes in front of
|
||||
trapframe to simulate FRAME_SETUP
|
||||
|
@ -295,14 +295,14 @@ cpu_reset:
|
||||
lis %r3,tocbase@ha
|
||||
ld %r2,tocbase@l(%r3)
|
||||
lis %r3,1@l
|
||||
bl CNAME(.cpudep_ap_early_bootstrap) /* Set PCPU */
|
||||
bl CNAME(cpudep_ap_early_bootstrap) /* Set PCPU */
|
||||
nop
|
||||
bl CNAME(.pmap_cpu_bootstrap) /* Turn on virtual memory */
|
||||
bl CNAME(pmap_cpu_bootstrap) /* Turn on virtual memory */
|
||||
nop
|
||||
bl CNAME(.cpudep_ap_bootstrap) /* Set up PCPU and stack */
|
||||
bl CNAME(cpudep_ap_bootstrap) /* Set up PCPU and stack */
|
||||
nop
|
||||
mr %r1,%r3 /* Use new stack */
|
||||
bl CNAME(.machdep_ap_bootstrap) /* And away! */
|
||||
bl CNAME(machdep_ap_bootstrap) /* And away! */
|
||||
nop
|
||||
|
||||
/* Should not be reached */
|
||||
@ -510,7 +510,7 @@ trapagain:
|
||||
lis %r3,tocbase@ha
|
||||
ld %r2,tocbase@l(%r3)
|
||||
addi %r3,%r1,48
|
||||
bl CNAME(.powerpc_interrupt)
|
||||
bl CNAME(powerpc_interrupt)
|
||||
nop
|
||||
|
||||
.globl CNAME(trapexit) /* backtrace code sentinel */
|
||||
@ -538,7 +538,7 @@ CNAME(trapexit):
|
||||
lis %r3,tocbase@ha
|
||||
ld %r2,tocbase@l(%r3)
|
||||
addi %r3,%r1,48
|
||||
bl CNAME(.ast)
|
||||
bl CNAME(ast)
|
||||
nop
|
||||
.globl CNAME(asttrapexit) /* backtrace code sentinel #2 */
|
||||
CNAME(asttrapexit):
|
||||
@ -587,7 +587,7 @@ dbtrap:
|
||||
lis %r3,tocbase@ha
|
||||
ld %r2,tocbase@l(%r3)
|
||||
addi %r3,%r1,48
|
||||
bl CNAME(.db_trap_glue)
|
||||
bl CNAME(db_trap_glue)
|
||||
nop
|
||||
or. %r3,%r3,%r3
|
||||
bne dbleave
|
||||
|
@ -37,7 +37,7 @@
|
||||
|
||||
#include <sys/cdefs.h>
|
||||
|
||||
#ifdef PIC
|
||||
#if defined(PIC) && !defined(__powerpc64__)
|
||||
#define PIC_PROLOGUE XXX
|
||||
#define PIC_EPILOGUE XXX
|
||||
#define PIC_PLT(x) x@plt
|
||||
@ -53,11 +53,6 @@
|
||||
#define PIC_GOT(x) x
|
||||
#endif
|
||||
|
||||
#ifdef __powerpc64__
|
||||
#undef PIC_PLT
|
||||
#define PIC_PLT(x) __CONCAT(.,x)
|
||||
#endif
|
||||
|
||||
#define CNAME(csym) csym
|
||||
#define ASMNAME(asmsym) asmsym
|
||||
#ifdef __powerpc64__
|
||||
@ -73,8 +68,8 @@
|
||||
#define _ENTRY(x) \
|
||||
.text; .align 2; .globl x; .section ".opd","aw"; \
|
||||
.align 3; x: \
|
||||
.quad .x,.TOC.@tocbase,0; .previous; \
|
||||
.align 4; .globl .x; .type .x,@function; .x:
|
||||
.quad .L.x,.TOC.@tocbase,0; .size x,24; .previous; \
|
||||
.align 4; .type x,@function; .L.x:
|
||||
#else
|
||||
#define _ENTRY(x) \
|
||||
.text; .align 4; .globl x; .type x,@function; x:
|
||||
|
@ -83,13 +83,12 @@ __asm( " .text \n" \
|
||||
" .section \".opd\",\"aw\" \n" \
|
||||
" .align 3 \n" \
|
||||
"_mcount: \n" \
|
||||
" .quad ._mcount,.TOC.@tocbase,0 \n" \
|
||||
" .quad .L._mcount,.TOC.@tocbase,0\n" \
|
||||
" .previous \n" \
|
||||
" .type _mcount,@function \n" \
|
||||
" .align 4 \n" \
|
||||
" .globl ._mcount \n" \
|
||||
" .type ._mcount,@function \n" \
|
||||
"._mcount: \n" \
|
||||
" stdu %r1,-(288+120)(%r1) \n" \
|
||||
".L._mcount: \n" \
|
||||
" stdu %r1,-(288+128)(%r1) \n" \
|
||||
" std %r3,48(%r1) \n" \
|
||||
" std %r4,56(%r1) \n" \
|
||||
" std %r5,64(%r1) \n" \
|
||||
@ -103,7 +102,7 @@ __asm( " .text \n" \
|
||||
" ld %r3,0(%r1) \n" \
|
||||
" ld %r3,0(%r3) \n" \
|
||||
" ld %r3,16(%r3) \n" \
|
||||
" bl .__mcount \n" \
|
||||
" bl __mcount \n" \
|
||||
" nop \n" \
|
||||
" ld %r4,112(%r1) \n" \
|
||||
" mtlr %r4 \n" \
|
||||
@ -115,7 +114,7 @@ __asm( " .text \n" \
|
||||
" ld %r8,88(%r1) \n" \
|
||||
" ld %r9,96(%r1) \n" \
|
||||
" ld %r10,104(%r1) \n" \
|
||||
" addi %r1,%r1,(288+120) \n" \
|
||||
" addi %r1,%r1,(288+128) \n" \
|
||||
" blr \n");
|
||||
#else
|
||||
|
||||
|
@ -362,18 +362,7 @@
|
||||
extern __typeof (sym) aliassym __attribute__ ((__alias__ (#sym)))
|
||||
#endif
|
||||
#ifdef __STDC__
|
||||
#ifdef __powerpc64__
|
||||
#define __weak_reference(sym,alias) \
|
||||
__asm__(".weak " #alias); \
|
||||
__asm__(".equ " #alias ", " #sym); \
|
||||
__asm__(".weak ." #alias); \
|
||||
__asm__(".equ ." #alias ", ." #sym)
|
||||
#else
|
||||
#define __weak_reference(sym,alias) \
|
||||
__asm__(".weak " #alias); \
|
||||
__asm__(".equ " #alias ", " #sym)
|
||||
#endif
|
||||
#define __weak_reference_data(sym,alias)\
|
||||
__asm__(".weak " #alias); \
|
||||
__asm__(".equ " #alias ", " #sym)
|
||||
#define __warn_references(sym,msg) \
|
||||
|
@ -58,7 +58,7 @@
|
||||
* in the range 5 to 9.
|
||||
*/
|
||||
#undef __FreeBSD_version
|
||||
#define __FreeBSD_version 900032 /* Master, propagated to newvers */
|
||||
#define __FreeBSD_version 900033 /* Master, propagated to newvers */
|
||||
|
||||
#ifdef _KERNEL
|
||||
#define P_OSREL_SIGSEGV 700004
|
||||
|
@ -1295,7 +1295,9 @@ ufs_rename(ap)
|
||||
newparent = tdp->i_number;
|
||||
doingdirectory = 1;
|
||||
}
|
||||
if (fvp->v_mountedhere != NULL || (tvp && tvp->v_mountedhere != NULL)) {
|
||||
if ((fvp->v_type == VDIR && fvp->v_mountedhere != NULL) ||
|
||||
(tvp != NULL && tvp->v_type == VDIR &&
|
||||
tvp->v_mountedhere != NULL)) {
|
||||
error = EXDEV;
|
||||
goto unlockout;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user