I even tried: $ cd /home/varodek/development/newlib/b-sparc-rtems5-newlib/sparc-rtems5/newlib/libc/posix $ sparc-rtems5-nm -A ./*.o | grep lib_a-ndbm.o Output << ./lib_a-ndbm.o:00000000 T dbm_clearerr ./lib_a-ndbm.o:00000000 T dbm_close ./lib_a-ndbm.o:00000000 T dbm_delete ./lib_a-ndbm.o:00000000 T dbm_dirfno ./lib_a-ndbm.o:00000000 T dbm_error ./lib_a-ndbm.o:00000000 T dbm_fetch ./lib_a-ndbm.o:00000000 T dbm_firstkey ./lib_a-ndbm.o:00000000 T dbm_nextkey ./lib_a-ndbm.o:00000000 T dbm_open ./lib_a-ndbm.o:00000000 T dbm_store ./lib_a-ndbm.o: U __errno ./lib_a-ndbm.o: U __hash_open ./lib_a-ndbm.o: U strcat ./lib_a-ndbm.o: U strcpy ./lib_a-ndbm.o: U strlen
On Thu, Jun 27, 2019 at 11:51 AM Vaibhav Gupta <vaibhavgupt...@gmail.com> wrote: > > > On Thu, Jun 27, 2019 at 11:24 AM Aditya Upadhyay <aadit0...@gmail.com> > wrote: > >> On Thu, Jun 27, 2019 at 11:14 AM Vaibhav Gupta <vaibhavgupt...@gmail.com> >> wrote: >> > >> > >> > >> > On Thu, Jun 27, 2019 at 10:08 AM Aditya Upadhyay <aadit0...@gmail.com> >> wrote: >> >> >> >> On Thu, Jun 27, 2019 at 2:11 AM Vaibhav Gupta < >> vaibhavgupt...@gmail.com> wrote: >> >> > >> >> > Hello Gedare, >> >> > as you suggested, to use the group name of patch as 'newlib'. >> >> > I did that and then removed the line "%patch setup newlib -p1" >> >> > It has generated ndbm.h in include directory. >> >> > >> >> >> >> You are applying the patches to RSB just for testing purpose. It would >> >> not show your contribution. >> >> This will only help you to tests your methods what you will be going >> >> to contribute to newlib. >> >> So figuring out the solution of this old header replacement or >> >> updating headers and submitting the patches to >> >> the newlib is recommended. >> > >> > Sure, I will complete the testsuite as soon as possible and then push >> the patch to newlib. >> >> >> First you will have to figure out the dependecies between headers, >> only then you would be able to >> send the right patches. Otherwise You have to make much changes in your >> patch. >> >> >> >> >> I appreciate your effort. Have you figured out how would you be going >> >> to write the test cases for ndbm and ftw methods? >> > >> > I did tried to check for the ndbm using raw ndbm methods in >> testsuites/samples/hello/init.c: >> https://github.com/VARoDeK/rtems/blob/test_ndbm_presence/testsuites/samples/hello/init.c >> > . >> >> You will have to write test cases in psxtests directory by following >> this open group page: >> >> https://pubs.opengroup.org/onlinepubs/9699919799/functions/dbm_clearerr.html >> >> > It showing the error: >> > >> /home/varodek/development/rtems/5/lib/gcc/sparc-rtems5/7.4.1/../../../../sparc-rtems5/bin/ld: >> hello/hello-init.o: in function `Init': >> > >> /home/varodek/development/rtems/kernel/rtems/c/src/../../testsuites/samples/hello/init.c:41: >> undefined reference to `dbm_open' >> > >> /home/varodek/development/rtems/5/lib/gcc/sparc-rtems5/7.4.1/../../../../sparc-rtems5/bin/ld: >> /home/varodek/development/rtems/kernel/rtems/c/src/../../testsuites/samples/hello/init.c:42: >> undefined reference to `dbm_store' >> > >> /home/varodek/development/rtems/5/lib/gcc/sparc-rtems5/7.4.1/../../../../sparc-rtems5/bin/ld: >> /home/varodek/development/rtems/kernel/rtems/c/src/../../testsuites/samples/hello/init.c:45: >> undefined reference to `dbm_fetch' >> > >> /home/varodek/development/rtems/5/lib/gcc/sparc-rtems5/7.4.1/../../../../sparc-rtems5/bin/ld: >> /home/varodek/development/rtems/kernel/rtems/c/src/../../testsuites/samples/hello/init.c:49: >> undefined reference to `dbm_close' >> >> >> >> >> Can you check whether function symbol is getting generated or not? >> Like when you compile newlib, You can see that function symbol >> using this command: >> >> $sparc-rtems5-nm `find . -name lib_a-ndbm.o` This command will list >> the function symbol. >> > When I made changes in Newlib-cygwin, and compiled it in > b-sparc-rtems5-newlib. > I checked for function symbols using commnad : > $ cd > /home/varodek/development/newlib/b-sparc-rtems5-newlib/sparc-rtems5/newlib/libc/posix > $ nm -A ./*.o | grep dbm_close > output<< ./lib_a-ndbm.o:00000000 T dbm_close > >> >> >> > Vaibhav Gupta >> >> > >> >> > On Wed, Jun 26, 2019 at 8:41 PM Vaibhav Gupta < >> vaibhavgupt...@gmail.com> wrote: >> >> >> >> >> >> >> >> >> >> >> >> On Wed, Jun 26, 2019 at 8:35 PM Vaibhav Gupta < >> vaibhavgupt...@gmail.com> wrote: >> >> >>> >> >> >>> Hello, >> >> >>> >> >> >>> Newlib is compiling successfully. >> >> >>> But when i applied patch to RSB. It is not generating ndbm.h >> inside rtems/5/sparc-rtem5/include this time. >> >> >>> >> >> >>> I am following same steps again which I followed that day when >> ndbm.h was successfully generated. >> >> >>> Below are the log files generated by rsb build. >> >> >> >> >> >> Although, before testing, I update RSB today (git pull). I >> figured that the configuration file, used by rsb for newlib, is now changed. >> >> >> . >> >> >> So i updated my steps accordingly. That is, I added the patch in >> that new configuration file. >> >> >> . >> >> >> According to logs, patch is applied I guess, but it is not >> generating ndbm.h in include directory. >> >> >>> >> >> >>> >> >> >>> On Wed, Jun 26, 2019 at 8:32 PM Vaibhav Gupta < >> vaibhavgupt...@gmail.com> wrote: >> >> >>>> >> >> >>>> --- >> >> >>>> newlib/libc/include/ndbm.h | 84 +++++++++++++ >> >> >>>> newlib/libc/search/Makefile.am | 1 + >> >> >>>> newlib/libc/search/ndbm.c | 215 >> +++++++++++++++++++++++++++++++++ >> >> >>>> 3 files changed, 300 insertions(+) >> >> >>>> create mode 100644 newlib/libc/include/ndbm.h >> >> >>>> create mode 100644 newlib/libc/search/ndbm.c >> >> >>>> >> >> >>>> diff --git a/newlib/libc/include/ndbm.h >> b/newlib/libc/include/ndbm.h >> >> >>>> new file mode 100644 >> >> >>>> index 000000000..3b42c60b0 >> >> >>>> --- /dev/null >> >> >>>> +++ b/newlib/libc/include/ndbm.h >> >> >>>> @@ -0,0 +1,84 @@ >> >> >>>> +/*- >> >> >>>> + * SPDX-License-Identifier: BSD-3-Clause >> >> >>>> + * >> >> >>>> + * Copyright (c) 1990, 1993 >> >> >>>> + * The Regents of the University of California. All rights >> reserved. >> >> >>>> + * >> >> >>>> + * This code is derived from software contributed to Berkeley by >> >> >>>> + * Margo Seltzer. >> >> >>>> + * >> >> >>>> + * 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. >> >> >>>> + * 3. Neither the name of the University nor the names of its >> contributors >> >> >>>> + * may be used to endorse or promote products derived from >> this software >> >> >>>> + * without specific prior written permission. >> >> >>>> + * >> >> >>>> + * THIS SOFTWARE IS PROVIDED BY THE REGENTS 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 REGENTS 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. >> >> >>>> + * >> >> >>>> + * @(#)ndbm.h 8.1 (Berkeley) 6/2/93 >> >> >>>> + * $FreeBSD$ >> >> >>>> + */ >> >> >>>> + >> >> >>>> +#ifndef _NDBM_H_ >> >> >>>> +#define _NDBM_H_ >> >> >>>> + >> >> >>>> +#define __DBINTERFACE_PRIVATE >> >> >>>> + >> >> >>>> +/* Map dbm interface onto db(3). */ >> >> >>>> +#define DBM_RDONLY O_RDONLY >> >> >>>> + >> >> >>>> +/* Flags to dbm_store(). */ >> >> >>>> +#define DBM_INSERT 0 >> >> >>>> +#define DBM_REPLACE 1 >> >> >>>> + >> >> >>>> +/* >> >> >>>> + * The db(3) support for ndbm always appends this suffix to the >> >> >>>> + * file name to avoid overwriting the user's original database. >> >> >>>> + */ >> >> >>>> +#define DBM_SUFFIX ".db" >> >> >>>> + >> >> >>>> +typedef struct { >> >> >>>> + void *dptr; >> >> >>>> + int dsize; /* XXX Should be size_t according to >> 1003.1-2008. */ >> >> >>>> +} datum; >> >> >>>> + >> >> >>>> +struct __db; >> >> >>>> +typedef struct __db DB; >> >> >>>> +typedef DB DBM; >> >> >>>> +#define dbm_pagfno(a) DBM_PAGFNO_NOT_AVAILABLE >> >> >>>> + >> >> >>>> +__BEGIN_DECLS >> >> >>>> +int dbm_clearerr(DBM *); >> >> >>>> +void dbm_close(DBM *); >> >> >>>> +int dbm_delete(DBM *, datum); >> >> >>>> +int dbm_error(DBM *); >> >> >>>> +datum dbm_fetch(DBM *, datum); >> >> >>>> +datum dbm_firstkey(DBM *); >> >> >>>> +#if __BSD_VISIBLE >> >> >>>> +long dbm_forder(DBM *, datum); >> >> >>>> +#endif >> >> >>>> +datum dbm_nextkey(DBM *); >> >> >>>> +DBM *dbm_open(const char *, int, mode_t); >> >> >>>> +int dbm_store(DBM *, datum, datum, int); >> >> >>>> +#if __BSD_VISIBLE >> >> >>>> +int dbm_dirfno(DBM *); >> >> >>>> +#endif >> >> >>>> +__END_DECLS >> >> >>>> + >> >> >>>> +#endif /* !_NDBM_H_ */ >> >> >>>> diff --git a/newlib/libc/search/Makefile.am >> b/newlib/libc/search/Makefile.am >> >> >>>> index 98920c3f4..a61107fb9 100644 >> >> >>>> --- a/newlib/libc/search/Makefile.am >> >> >>>> +++ b/newlib/libc/search/Makefile.am >> >> >>>> @@ -9,6 +9,7 @@ GENERAL_SOURCES = \ >> >> >>>> db_local.h \ >> >> >>>> extern.h \ >> >> >>>> hash.h \ >> >> >>>> + ndbm.c \ >> >> >>>> page.h \ >> >> >>>> qsort.c >> >> >>>> >> >> >>>> diff --git a/newlib/libc/search/ndbm.c b/newlib/libc/search/ndbm.c >> >> >>>> new file mode 100644 >> >> >>>> index 000000000..8ac6d1f40 >> >> >>>> --- /dev/null >> >> >>>> +++ b/newlib/libc/search/ndbm.c >> >> >>>> @@ -0,0 +1,215 @@ >> >> >>>> +/*- >> >> >>>> + * SPDX-License-Identifier: BSD-3-Clause >> >> >>>> + * >> >> >>>> + * Copyright (c) 1990, 1993 >> >> >>>> + * The Regents of the University of California. All rights >> reserved. >> >> >>>> + * >> >> >>>> + * This code is derived from software contributed to Berkeley by >> >> >>>> + * Margo Seltzer. >> >> >>>> + * >> >> >>>> + * 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. >> >> >>>> + * 3. Neither the name of the University nor the names of its >> contributors >> >> >>>> + * may be used to endorse or promote products derived from >> this software >> >> >>>> + * without specific prior written permission. >> >> >>>> + * >> >> >>>> + * THIS SOFTWARE IS PROVIDED BY THE REGENTS 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 REGENTS 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. >> >> >>>> + */ >> >> >>>> + >> >> >>>> +#if defined(LIBC_SCCS) && !defined(lint) >> >> >>>> +static char sccsid[] = "@(#)ndbm.c 8.4 (Berkeley) 7/21/94"; >> >> >>>> +#endif /* LIBC_SCCS and not lint */ >> >> >>>> +#include <sys/cdefs.h> >> >> >>>> +__FBSDID("$FreeBSD$"); >> >> >>>> + >> >> >>>> +/* >> >> >>>> + * This package provides a dbm compatible interface to the new >> hashing >> >> >>>> + * package described in db(3). >> >> >>>> + */ >> >> >>>> + >> >> >>>> +#include <sys/param.h> >> >> >>>> + >> >> >>>> +#include <stdio.h> >> >> >>>> +#include <string.h> >> >> >>>> +#include <errno.h> >> >> >>>> + >> >> >>>> +#include <ndbm.h> >> >> >>>> +#include "db_local.h" >> >> >>>> +#include "hash.h" >> >> >>>> + >> >> >>>> +/* >> >> >>>> + * Returns: >> >> >>>> + * *DBM on success >> >> >>>> + * NULL on failure >> >> >>>> + */ >> >> >>>> +extern DBM * >> >> >>>> +dbm_open(const char *file, int flags, mode_t mode) >> >> >>>> +{ >> >> >>>> + HASHINFO info; >> >> >>>> + char path[MAXPATHLEN]; >> >> >>>> + >> >> >>>> + info.bsize = 4096; >> >> >>>> + info.ffactor = 40; >> >> >>>> + info.nelem = 1; >> >> >>>> + info.cachesize = 0; >> >> >>>> + info.hash = NULL; >> >> >>>> + info.lorder = 0; >> >> >>>> + >> >> >>>> + if( strlen(file) >= sizeof(path) - strlen(DBM_SUFFIX)) { >> >> >>>> + errno = ENAMETOOLONG; >> >> >>>> + return(NULL); >> >> >>>> + } >> >> >>>> + (void)strcpy(path, file); >> >> >>>> + (void)strcat(path, DBM_SUFFIX); >> >> >>>> + return ((DBM *)__hash_open(path, flags, mode, 0, &info)); >> >> >>>> +} >> >> >>>> + >> >> >>>> +extern void >> >> >>>> +dbm_close(DBM *db) >> >> >>>> +{ >> >> >>>> + (void)(db->close)(db); >> >> >>>> +} >> >> >>>> + >> >> >>>> +/* >> >> >>>> + * Returns: >> >> >>>> + * DATUM on success >> >> >>>> + * NULL on failure >> >> >>>> + */ >> >> >>>> +extern datum >> >> >>>> +dbm_fetch(DBM *db, datum key) >> >> >>>> +{ >> >> >>>> + datum retdata; >> >> >>>> + int status; >> >> >>>> + DBT dbtkey, dbtretdata; >> >> >>>> + >> >> >>>> + dbtkey.data = key.dptr; >> >> >>>> + dbtkey.size = key.dsize; >> >> >>>> + status = (db->get)(db, &dbtkey, &dbtretdata, 0); >> >> >>>> + if (status) { >> >> >>>> + dbtretdata.data = NULL; >> >> >>>> + dbtretdata.size = 0; >> >> >>>> + } >> >> >>>> + retdata.dptr = dbtretdata.data; >> >> >>>> + retdata.dsize = dbtretdata.size; >> >> >>>> + return (retdata); >> >> >>>> +} >> >> >>>> + >> >> >>>> +/* >> >> >>>> + * Returns: >> >> >>>> + * DATUM on success >> >> >>>> + * NULL on failure >> >> >>>> + */ >> >> >>>> +extern datum >> >> >>>> +dbm_firstkey(DBM *db) >> >> >>>> +{ >> >> >>>> + int status; >> >> >>>> + datum retkey; >> >> >>>> + DBT dbtretkey, dbtretdata; >> >> >>>> + >> >> >>>> + status = (db->seq)(db, &dbtretkey, &dbtretdata, R_FIRST); >> >> >>>> + if (status) >> >> >>>> + dbtretkey.data = NULL; >> >> >>>> + retkey.dptr = dbtretkey.data; >> >> >>>> + retkey.dsize = dbtretkey.size; >> >> >>>> + return (retkey); >> >> >>>> +} >> >> >>>> + >> >> >>>> +/* >> >> >>>> + * Returns: >> >> >>>> + * DATUM on success >> >> >>>> + * NULL on failure >> >> >>>> + */ >> >> >>>> +extern datum >> >> >>>> +dbm_nextkey(DBM *db) >> >> >>>> +{ >> >> >>>> + int status; >> >> >>>> + datum retkey; >> >> >>>> + DBT dbtretkey, dbtretdata; >> >> >>>> + >> >> >>>> + status = (db->seq)(db, &dbtretkey, &dbtretdata, R_NEXT); >> >> >>>> + if (status) >> >> >>>> + dbtretkey.data = NULL; >> >> >>>> + retkey.dptr = dbtretkey.data; >> >> >>>> + retkey.dsize = dbtretkey.size; >> >> >>>> + return (retkey); >> >> >>>> +} >> >> >>>> + >> >> >>>> +/* >> >> >>>> + * Returns: >> >> >>>> + * 0 on success >> >> >>>> + * <0 failure >> >> >>>> + */ >> >> >>>> +extern int >> >> >>>> +dbm_delete(DBM *db, datum key) >> >> >>>> +{ >> >> >>>> + int status; >> >> >>>> + DBT dbtkey; >> >> >>>> + >> >> >>>> + dbtkey.data = key.dptr; >> >> >>>> + dbtkey.size = key.dsize; >> >> >>>> + status = (db->del)(db, &dbtkey, 0); >> >> >>>> + if (status) >> >> >>>> + return (-1); >> >> >>>> + else >> >> >>>> + return (0); >> >> >>>> +} >> >> >>>> + >> >> >>>> +/* >> >> >>>> + * Returns: >> >> >>>> + * 0 on success >> >> >>>> + * <0 failure >> >> >>>> + * 1 if DBM_INSERT and entry exists >> >> >>>> + */ >> >> >>>> +extern int >> >> >>>> +dbm_store(DBM *db, datum key, datum data, int flags) >> >> >>>> +{ >> >> >>>> + DBT dbtkey, dbtdata; >> >> >>>> + >> >> >>>> + dbtkey.data = key.dptr; >> >> >>>> + dbtkey.size = key.dsize; >> >> >>>> + dbtdata.data = data.dptr; >> >> >>>> + dbtdata.size = data.dsize; >> >> >>>> + return ((db->put)(db, &dbtkey, &dbtdata, >> >> >>>> + (flags == DBM_INSERT) ? R_NOOVERWRITE : 0)); >> >> >>>> +} >> >> >>>> + >> >> >>>> +extern int >> >> >>>> +dbm_error(DBM *db) >> >> >>>> +{ >> >> >>>> + HTAB *hp; >> >> >>>> + >> >> >>>> + hp = (HTAB *)db->internal; >> >> >>>> + return (hp->error); >> >> >>>> +} >> >> >>>> + >> >> >>>> +extern int >> >> >>>> +dbm_clearerr(DBM *db) >> >> >>>> +{ >> >> >>>> + HTAB *hp; >> >> >>>> + >> >> >>>> + hp = (HTAB *)db->internal; >> >> >>>> + hp->error = 0; >> >> >>>> + return (0); >> >> >>>> +} >> >> >>>> + >> >> >>>> +extern int >> >> >>>> +dbm_dirfno(DBM *db) >> >> >>>> +{ >> >> >>>> + return(((HTAB *)db->internal)->fp); >> >> >>>> +} >> >> >>>> -- >> >> >>>> 2.21.0 >> >> >>>> >> >
_______________________________________________ devel mailing list devel@rtems.org http://lists.rtems.org/mailman/listinfo/devel