Fwd: New Defects reported by Coverity Scan for RTEMS-Tools
Joel Sherrill
joel at rtems.org
Sun Dec 24 20:47:13 UTC 2023
Any suggestions on how to address these?
---------- Forwarded message ---------
From: <scan-admin at coverity.com>
Date: Sun, Dec 24, 2023, 1:18 PM
Subject: New Defects reported by Coverity Scan for RTEMS-Tools
To: <joel.sherrill at gmail.com>
Hi,
Please find the latest report on new defect(s) introduced to RTEMS-Tools
found with Coverity Scan.
39 new defect(s) introduced to RTEMS-Tools found with Coverity Scan.
12 defect(s), reported by Coverity Scan earlier, were marked fixed in the
recent build analyzed by Coverity Scan.
New defect(s) Reported-by: Coverity Scan
Showing 20 of 39 defect(s)
** CID 1574966: Performance inefficiencies (COPY_INSTEAD_OF_MOVE)
/tester/covoar/Target_i386.cc: 17 in
Target::Target_i386::Target_i386(std::__cxx11::basic_string<char,
std::char_traits<char>, std::allocator<char>>)()
________________________________________________________________________________________________________
*** CID 1574966: Performance inefficiencies (COPY_INSTEAD_OF_MOVE)
/tester/covoar/Target_i386.cc: 17 in
Target::Target_i386::Target_i386(std::__cxx11::basic_string<char,
std::char_traits<char>, std::allocator<char>>)()
11 #include <string.h>
12 #include <unistd.h>
13
14 namespace Target {
15
16 Target_i386::Target_i386( std::string targetName ):
>>> CID 1574966: Performance inefficiencies (COPY_INSTEAD_OF_MOVE)
>>> "targetName" is passed-by-value as parameter to
"Target::TargetBase::TargetBase(std::__cxx11::string)" when it could be
moved instead.
17 TargetBase( targetName )
18 {
19 conditionalBranchInstructions.push_back("ja");
20 conditionalBranchInstructions.push_back("jb");
21 conditionalBranchInstructions.push_back("jc");
22 conditionalBranchInstructions.push_back("je");
** CID 1574965: (COPY_INSTEAD_OF_MOVE)
/rtemstoolkit/pkgconfig.cpp: 90 in pkgconfig::package::load(const
std::__cxx11::basic_string<char, std::char_traits<char>,
std::allocator<char>> &)()
/rtemstoolkit/pkgconfig.cpp: 92 in pkgconfig::package::load(const
std::__cxx11::basic_string<char, std::char_traits<char>,
std::allocator<char>> &)()
________________________________________________________________________________________________________
*** CID 1574965: (COPY_INSTEAD_OF_MOVE)
/rtemstoolkit/pkgconfig.cpp: 90 in pkgconfig::package::load(const
std::__cxx11::basic_string<char, std::char_traits<char>,
std::allocator<char>> &)()
84
85 if (d != std::string::npos)
86 {
87 std::string lhs = rld::tolower (line.substr (0, d));
88 std::string rhs = line.substr (d + 1);
89 if (def)
>>> CID 1574965: (COPY_INSTEAD_OF_MOVE)
>>> "rhs" is copied in a call to copy assignment "operator =", when it
could be moved instead.
90 defines[lhs] = rhs;
91 else
92 fields[lhs] = rhs;
93 }
94 }
95 }
/rtemstoolkit/pkgconfig.cpp: 92 in pkgconfig::package::load(const
std::__cxx11::basic_string<char, std::char_traits<char>,
std::allocator<char>> &)()
86 {
87 std::string lhs = rld::tolower (line.substr (0, d));
88 std::string rhs = line.substr (d + 1);
89 if (def)
90 defines[lhs] = rhs;
91 else
>>> CID 1574965: (COPY_INSTEAD_OF_MOVE)
>>> "rhs" is copied in a call to copy assignment "operator =", when it
could be moved instead.
92 fields[lhs] = rhs;
93 }
94 }
95 }
96
97 in.close ();
** CID 1574964: Performance inefficiencies (COPY_INSTEAD_OF_MOVE)
/tester/covoar/covoar.cc: 142 in
createBuildPath(std::__cxx11::list<Coverage::ExecutableInfo *,
std::allocator<Coverage::ExecutableInfo *>> &,
std::__cxx11::basic_string<char, std::char_traits<char>,
std::allocator<char>> &, std::__cxx11::basic_string<char,
std::char_traits<char>, std::allocator<char>> &,
std::__cxx11::basic_string<char, std::char_traits<char>,
std::allocator<char>> &)()
________________________________________________________________________________________________________
*** CID 1574964: Performance inefficiencies (COPY_INSTEAD_OF_MOVE)
/tester/covoar/covoar.cc: 142 in
createBuildPath(std::__cxx11::list<Coverage::ExecutableInfo *,
std::allocator<Coverage::ExecutableInfo *>> &,
std::__cxx11::basic_string<char, std::char_traits<char>,
std::allocator<char>> &, std::__cxx11::basic_string<char,
std::char_traits<char>, std::allocator<char>> &,
std::__cxx11::basic_string<char, std::char_traits<char>,
std::allocator<char>> &)()
136 for ( ; pri != eparts.rend(); ++pri )
137 bparts.insert(bparts.begin(), *pri);
138
139 std::string thisBuildPath;
140 rld::path::path_join( thisBuildPath, bparts, thisBuildPath
);
141 if ( buildPath.empty() ) {
>>> CID 1574964: Performance inefficiencies (COPY_INSTEAD_OF_MOVE)
>>> "thisBuildPath" is copied in a call to copy assignment "operator
=", when it could be moved instead.
142 buildPath = thisBuildPath;
143 } else {
144 if ( buildPath != thisBuildPath ) {
145 fail = "executable build path does not match: " +
buildPath;
146 }
147 }
** CID 1574963: Performance inefficiencies (COPY_INSTEAD_OF_MOVE)
/linkers/rtems-exeinfo.cpp: 757 in
rld::exeinfo::func_count::func_count(std::__cxx11::basic_string<char,
std::char_traits<char>, std::allocator<char>>, unsigned long)()
________________________________________________________________________________________________________
*** CID 1574963: Performance inefficiencies (COPY_INSTEAD_OF_MOVE)
/linkers/rtems-exeinfo.cpp: 757 in
rld::exeinfo::func_count::func_count(std::__cxx11::basic_string<char,
std::char_traits<char>, std::allocator<char>>, unsigned long)()
751 {
752 std::string name;
753 int count;
754 size_t size;
755
756 func_count (std::string name, size_t size)
>>> CID 1574963: Performance inefficiencies (COPY_INSTEAD_OF_MOVE)
>>> "name" is copied in call to copy constructor
"std::__cxx11::basic_string<char, std::char_traits<char>,
std::allocator<char> >", when it could be moved instead.
757 : name (name),
758 count (1),
759 size (size) {
760 }
761 };
762 typedef std::vector < func_count > func_counts;
** CID 1574962: Performance inefficiencies (COPY_INSTEAD_OF_MOVE)
/tester/covoar/Target_powerpc.cc: 87 in
Target::Target_powerpc_Constructor(std::__cxx11::basic_string<char,
std::char_traits<char>, std::allocator<char>>)()
________________________________________________________________________________________________________
*** CID 1574962: Performance inefficiencies (COPY_INSTEAD_OF_MOVE)
/tester/covoar/Target_powerpc.cc: 87 in
Target::Target_powerpc_Constructor(std::__cxx11::basic_string<char,
std::char_traits<char>, std::allocator<char>>)()
81 }
82
83 TargetBase *Target_powerpc_Constructor(
84 std::string targetName
85 )
86 {
>>> CID 1574962: Performance inefficiencies (COPY_INSTEAD_OF_MOVE)
>>> "targetName" is passed-by-value as parameter to
"Target::Target_powerpc::Target_powerpc(std::__cxx11::string)" when it
could be moved instead.
87 return new Target_powerpc( targetName );
88 }
89
** CID 1574961: Performance inefficiencies (COPY_INSTEAD_OF_MOVE)
/tester/covoar/Target_arm.cc: 129 in
Target::Target_arm_Constructor(std::__cxx11::basic_string<char,
std::char_traits<char>, std::allocator<char>>)()
________________________________________________________________________________________________________
*** CID 1574961: Performance inefficiencies (COPY_INSTEAD_OF_MOVE)
/tester/covoar/Target_arm.cc: 129 in
Target::Target_arm_Constructor(std::__cxx11::basic_string<char,
std::char_traits<char>, std::allocator<char>>)()
123 }
124
125 TargetBase *Target_arm_Constructor(
126 std::string targetName
127 )
128 {
>>> CID 1574961: Performance inefficiencies (COPY_INSTEAD_OF_MOVE)
>>> "targetName" is passed-by-value as parameter to
"Target::Target_arm::Target_arm(std::__cxx11::string)" when it could be
moved instead.
129 return new Target_arm( targetName );
130 }
131
** CID 1574960: Performance inefficiencies (COPY_INSTEAD_OF_MOVE)
/tester/covoar/Target_riscv.cc: 81 in
Target::Target_riscv_Constructor(std::__cxx11::basic_string<char,
std::char_traits<char>, std::allocator<char>>)()
________________________________________________________________________________________________________
*** CID 1574960: Performance inefficiencies (COPY_INSTEAD_OF_MOVE)
/tester/covoar/Target_riscv.cc: 81 in
Target::Target_riscv_Constructor(std::__cxx11::basic_string<char,
std::char_traits<char>, std::allocator<char>>)()
75 }
76
77 TargetBase *Target_riscv_Constructor(
78 std::string targetName
79 )
80 {
>>> CID 1574960: Performance inefficiencies (COPY_INSTEAD_OF_MOVE)
>>> "targetName" is passed-by-value as parameter to
"Target::Target_riscv::Target_riscv(std::__cxx11::string)" when it could be
moved instead.
81 return new Target_riscv( targetName );
82 }
** CID 1574959: Insecure data handling (TAINTED_SCALAR)
________________________________________________________________________________________________________
*** CID 1574959: Insecure data handling (TAINTED_SCALAR)
/rtemstoolkit/rld-elf.cpp: 562 in rld::elf::file::begin(const
std::__cxx11::basic_string<char, std::char_traits<char>,
std::allocator<char>> &, int, bool, rld::elf::file*, long)()
556 writable = writable_;
557 elf_ = elf__;
558
559 if (!archive && !writable)
560 {
561 load_header ();
>>> CID 1574959: Insecure data handling (TAINTED_SCALAR)
>>> Passing tainted expression "this->ehdr" to "load_sections", which
uses it as a loop boundary.
562 load_sections ();
563 }
564 }
565
566 void
567 file::end ()
** CID 1574958: Performance inefficiencies (COPY_INSTEAD_OF_MOVE)
/linkers/rtems-exeinfo.cpp: 473 in
rld::exeinfo::image::output_compilation_unit(bool, bool)()
________________________________________________________________________________________________________
*** CID 1574958: Performance inefficiencies (COPY_INSTEAD_OF_MOVE)
/linkers/rtems-exeinfo.cpp: 473 in
rld::exeinfo::image::output_compilation_unit(bool, bool)()
467 std::cout << std::endl;
468
469 if (objects)
470 {
471 std::cout << " Object files: " << cus.size () << std::endl;
472
>>> CID 1574958: Performance inefficiencies (COPY_INSTEAD_OF_MOVE)
>>> "common_flags" is copied in call to copy constructor
"std::vector<std::__cxx11::basic_string<char, std::char_traits<char>,
std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char,
std::char_traits<char>, std::allocator<char> > > >", when it could be moved
instead.
473 rld::strings filter_flags = common_flags;
474 filter_flags.insert (filter_flags.end (),
475 flag_exceptions.begin (),
476 flag_exceptions.end());
477
478 for (auto& p : producers)
** CID 1574957: Memory - illegal accesses (UNINIT)
/rtemstoolkit/libiberty/cplus-dem.c: 196 in cplus_demangle()
________________________________________________________________________________________________________
*** CID 1574957: Memory - illegal accesses (UNINIT)
/rtemstoolkit/libiberty/cplus-dem.c: 196 in cplus_demangle()
190 {
191 ret = dlang_demangle (mangled, options);
192 if (ret)
193 return ret;
194 }
195
>>> CID 1574957: Memory - illegal accesses (UNINIT)
>>> Using uninitialized value "ret".
196 return (ret);
197 }
198
199 /* Demangle ada names. The encoding is documented in
gcc/ada/exp_dbug.ads. */
200
201 char *
** CID 1574956: Memory - corruptions (ARRAY_VS_SINGLETON)
________________________________________________________________________________________________________
*** CID 1574956: Memory - corruptions (ARRAY_VS_SINGLETON)
/rtemstoolkit/SimpleIni.h: 2104 in CSimpleIniTempl<char,
SI_GenericCase<char>, SI_ConvertA<char>>::AddEntry(const char *, const char
*, const char *, const char *, bool, bool)()
2098 // because we will be inserting the key next
2099 rc = CopyString(a_pKey);
2100 if (rc < 0) return rc;
2101 }
2102
2103 // we always need a copy of the value
>>> CID 1574956: Memory - corruptions (ARRAY_VS_SINGLETON)
>>> Passing "a_pValue" via argument "a_pValue" to function "CopyString"
which uses it as an array. This might corrupt or misinterpret adjacent
memory locations.
2104 rc = CopyString(a_pValue);
2105 if (rc < 0) return rc;
2106 }
2107
2108 // create the key entry
2109 if (iKey == keyval.end() || bForceCreateNewKey) {
** CID 1574955: Performance inefficiencies (COPY_INSTEAD_OF_MOVE)
/linkers/rtems-exeinfo.cpp: 1123 in main()
________________________________________________________________________________________________________
*** CID 1574955: Performance inefficiencies (COPY_INSTEAD_OF_MOVE)
/linkers/rtems-exeinfo.cpp: 1123 in main()
1117 if (rld::verbose ())
1118 std::cout << "exe-image: " << exe_name << std::endl;
1119
1120 /*
1121 * Open the executable and read the symbols.
1122 */
>>> CID 1574955: Performance inefficiencies (COPY_INSTEAD_OF_MOVE)
>>> "exe_name" is passed-by-value as parameter to
"rld::exeinfo::image::image(std::__cxx11::string, bool)" when it could be
moved instead.
1123 rld::exeinfo::image exe (exe_name, inlined | dwarf_data);
1124
1125 std::cout << "exe: " << exe.exe.name ().full () << std::endl
1126 << std::endl;
1127
1128 /*
** CID 1574954: Error handling issues (CHECKED_RETURN)
/tester/covoar/ObjdumpProcessor.cc: 187 in
Coverage::ObjdumpProcessor::determineLoadAddress(Coverage::ExecutableInfo
*)()
________________________________________________________________________________________________________
*** CID 1574954: Error handling issues (CHECKED_RETURN)
/tester/covoar/ObjdumpProcessor.cc: 187 in
Coverage::ObjdumpProcessor::determineLoadAddress(Coverage::ExecutableInfo
*)()
181 loadAddressFile.close();
182 std::ostringstream what;
183 what << "library " << Library << " not found in " <<
dlinfoName;
184 throw rld::error( what, METHOD );
185 }
186
>>> CID 1574954: Error handling issues (CHECKED_RETURN)
>>> Calling "sscanf" without checking return value (as is done
elsewhere 5 out of 6 times).
187 sscanf( inputBuffer, "%s %x", inLibName, &offset );
188 std::string tmp = inLibName;
189 if ( tmp.find( Library ) != tmp.npos ) {
190 // std::cerr << inLibName << " - 0x"
191 // << std::setfill( '0' ) << std::setw( 8 ) <<
std::hex
192 // << offset << std::endl
** CID 1574953: Performance inefficiencies (COPY_INSTEAD_OF_MOVE)
/rtemstoolkit/rld-rap.cpp: 770 in rld::rap::section_merge::operator
()(const rld::files::section &)()
________________________________________________________________________________________________________
*** CID 1574953: Performance inefficiencies (COPY_INSTEAD_OF_MOVE)
/rtemstoolkit/rld-rap.cpp: 770 in rld::rap::section_merge::operator
()(const rld::files::section &)()
764 osection osec (fsec.name,
765 offset,
766 fsec.size,
767 fsec.alignment,
768 fsec.relocs.size (),
769 fsec.flags);
>>> CID 1574953: Performance inefficiencies (COPY_INSTEAD_OF_MOVE)
>>> "osec" is copied in a call to copy assignment "operator =", when it
could be moved instead.
770 sec.osecs[fsec.index] = osec;
771 sec.osindexes.push_back (fsec.index);
772
773 uint32_t rc = 0;
774
775 for (files::relocations::const_iterator fri =
fsec.relocs.begin ();
** CID 1574952: Performance inefficiencies (COPY_INSTEAD_OF_MOVE)
/tester/covoar/TraceConverter.cc: 161 in main()
________________________________________________________________________________________________________
*** CID 1574952: Performance inefficiencies (COPY_INSTEAD_OF_MOVE)
/tester/covoar/TraceConverter.cc: 161 in main()
155 }
156
157
158 // Create toolnames.
159 try
160 {
>>> CID 1574952: Performance inefficiencies (COPY_INSTEAD_OF_MOVE)
>>> "cpuname" is passed-by-value as parameter to "TargetFactory" when
it could be moved instead.
161 targetInfo.reset( Target::TargetFactory( cpuname ) );
162 }
163 catch ( rld::error re )
164 {
165 std::cerr << "error: "
166 << re.where << ": " << re.what
** CID 1574951: Performance inefficiencies (COPY_INSTEAD_OF_MOVE)
/tester/covoar/Target_lm32.cc: 18 in
Target::Target_lm32::Target_lm32(std::__cxx11::basic_string<char,
std::char_traits<char>, std::allocator<char>>)()
________________________________________________________________________________________________________
*** CID 1574951: Performance inefficiencies (COPY_INSTEAD_OF_MOVE)
/tester/covoar/Target_lm32.cc: 18 in
Target::Target_lm32::Target_lm32(std::__cxx11::basic_string<char,
std::char_traits<char>, std::allocator<char>>)()
12 #include <algorithm>
13
14 namespace Target {
15
16 //
https://u15810271.ct.sendgrid.net/ls/click?upn=CTPegkVN6peWFCMEieYYmAy3X1jegPeWnxto7pNG35nvvR6RgfL-2BxTLFiyfH-2FOC7RuMZgjRkyIQlYzGf01lv2g-3D-3D-i1m_CTvEjVoKhyc6dLmJJo1u9AYIk8P8bcAbCPbBDYvYSXplrMrcL1gVgjbDyqPn4TwEJGFQgIP77zMUv4YPivzop50JtnsASbHLw76yRmZ6e4MurOPGecuvmjqOPnprCJ8VLiNfx8WaLxxU5NtnRNDfl0Wvu6xgN9yGxe4BiLE10r8iN-2BsjbHAJ4ay4txs4fMJF0VMXOnlSfjg7E3-2BC3vmDEf5PbAJjfqzYwkeCEq5NFho-3D
17 Target_lm32::Target_lm32( std::string targetName ):
>>> CID 1574951: Performance inefficiencies (COPY_INSTEAD_OF_MOVE)
>>> "targetName" is passed-by-value as parameter to
"Target::TargetBase::TargetBase(std::__cxx11::string)" when it could be
moved instead.
18 TargetBase( targetName )
19 {
20 conditionalBranchInstructions.push_back("be");
21 conditionalBranchInstructions.push_back("bge");
22 conditionalBranchInstructions.push_back("bgeu");
23 conditionalBranchInstructions.push_back("bg");
** CID 1574950: Performance inefficiencies (COPY_INSTEAD_OF_MOVE)
/tester/covoar/Target_aarch64.cc: 21 in
Target::Target_aarch64::Target_aarch64(std::__cxx11::basic_string<char,
std::char_traits<char>, std::allocator<char>>)()
________________________________________________________________________________________________________
*** CID 1574950: Performance inefficiencies (COPY_INSTEAD_OF_MOVE)
/tester/covoar/Target_aarch64.cc: 21 in
Target::Target_aarch64::Target_aarch64(std::__cxx11::basic_string<char,
std::char_traits<char>, std::allocator<char>>)()
15 #include "qemu-traces.h"
16 #include "Target_aarch64.h"
17
18 namespace Target {
19
20 Target_aarch64::Target_aarch64( std::string targetName ):
>>> CID 1574950: Performance inefficiencies (COPY_INSTEAD_OF_MOVE)
>>> "targetName" is passed-by-value as parameter to
"Target::TargetBase::TargetBase(std::__cxx11::string)" when it could be
moved instead.
21 TargetBase( targetName )
22 {
23 conditionalBranchInstructions.push_back("cbnz");
24 conditionalBranchInstructions.push_back("cbz");
25 conditionalBranchInstructions.push_back("tbnz");
26 conditionalBranchInstructions.push_back("tbz");
** CID 1574949: Performance inefficiencies (COPY_INSTEAD_OF_MOVE)
/tester/covoar/Target_lm32.cc: 49 in
Target::Target_lm32_Constructor(std::__cxx11::basic_string<char,
std::char_traits<char>, std::allocator<char>>)()
________________________________________________________________________________________________________
*** CID 1574949: Performance inefficiencies (COPY_INSTEAD_OF_MOVE)
/tester/covoar/Target_lm32.cc: 49 in
Target::Target_lm32_Constructor(std::__cxx11::basic_string<char,
std::char_traits<char>, std::allocator<char>>)()
43 }
44
45 TargetBase *Target_lm32_Constructor(
46 std::string targetName
47 )
48 {
>>> CID 1574949: Performance inefficiencies (COPY_INSTEAD_OF_MOVE)
>>> "targetName" is passed-by-value as parameter to
"Target::Target_lm32::Target_lm32(std::__cxx11::string)" when it could be
moved instead.
49 return new Target_lm32( targetName );
50 }
51
** CID 1574948: Performance inefficiencies (COPY_INSTEAD_OF_MOVE)
/tester/covoar/covoar.cc: 430 in covoar(int, char **)()
________________________________________________________________________________________________________
*** CID 1574948: Performance inefficiencies (COPY_INSTEAD_OF_MOVE)
/tester/covoar/covoar.cc: 430 in covoar(int, char **)()
424 coverageFormat = Coverage::CoverageFormatToEnum( format );
425 coverageReader = Coverage::CreateCoverageReader( coverageFormat );
426 if ( !coverageReader ) {
427 throw rld::error( "Unable to create coverage file reader",
"covoar" );
428 }
429
>>> CID 1574948: Performance inefficiencies (COPY_INSTEAD_OF_MOVE)
>>> "targetInfo" is copied in a call to copy assignment "operator =",
when it could be moved instead.
430 coverageReader->targetInfo_m = targetInfo;
431
432 // Prepare each executable for analysis.
433 for ( auto& exe : executablesToAnalyze ) {
434 if ( verbose ) {
435 std::cerr << "Extracting information from: " <<
exe->getFileName()
** CID 1574947: Performance inefficiencies (COPY_INSTEAD_OF_MOVE)
/trace/record/record-client-base.cc: 139 in ConfigFile::INIHandler(void *,
const char *, const char *, const char *)()
________________________________________________________________________________________________________
*** CID 1574947: Performance inefficiencies (COPY_INSTEAD_OF_MOVE)
/trace/record/record-client-base.cc: 139 in ConfigFile::INIHandler(void *,
const char *, const char *, const char *)()
133 if (it != self->parser_.end()) {
134 std::string error = (*it->second.first)(it->second.second,
name, value);
135 if (error == kNoError) {
136 return 1;
137 }
138
>>> CID 1574947: Performance inefficiencies (COPY_INSTEAD_OF_MOVE)
>>> "error" is copied in a call to copy assignment "operator =", when
it could be moved instead.
139 self->error_ = error;
140 } else {
141 self->error_ = std::string("unknown section: ") + section;
142 }
143
144 return 0;
________________________________________________________________________________________________________
To view the defects in Coverity Scan visit,
https://u15810271.ct.sendgrid.net/ls/click?upn=HRESupC-2F2Czv4BOaCWWCy7my0P0qcxCbhZ31OYv50ypUUzi-2FdSNmuyRB7BEFT8xQi8c7-2B1U0roIV5G3HXifs2sikLj2FV5O7uu1zqO3oUQQ-3Dr51O_CTvEjVoKhyc6dLmJJo1u9AYIk8P8bcAbCPbBDYvYSXplrMrcL1gVgjbDyqPn4TwEJGFQgIP77zMUv4YPivzop78Qx7Rq9wmqxwai52XAjlPpqDyI-2BM5qd0tjepo7gLLI8gY46ZkHCEVowsPB6fM1W8bVwYbsKW9LP8zNrenbYnND87xhqFqdy6SdJdkYYHWNvwE1oZdPVavb9Yp6ZxBPe-2BqH5yodkECGxLpxwRoEEsI-3D
To manage Coverity Scan email notifications for "joel.sherrill at gmail.com",
click
https://u15810271.ct.sendgrid.net/ls/click?upn=HRESupC-2F2Czv4BOaCWWCy7my0P0qcxCbhZ31OYv50yped04pjJnmXOsUBtKYNIXxTJDdEZ5ceQ-2BXdf-2FM1tcMIXP73MN3HxQfFTMLU5dSe8Rv0KFh7gYStOFjZD12ucRRnrjyUHOCTj7rG0E9HBcwa9CE8CGpcthnaEEfHiFVPqc-3DKn5A_CTvEjVoKhyc6dLmJJo1u9AYIk8P8bcAbCPbBDYvYSXplrMrcL1gVgjbDyqPn4TwEJGFQgIP77zMUv4YPivzop3StJ00M1Ne12rejWGRMHReDp1tAzcd9olZbutPxm-2B2n7Anpbm8G8Oswkyky1m2TxYRnMu3rgRq6wynbMBSZp-2BNK4umB8vezbiXcg7XvrIGIw2QDLw4lPBYFOPJpUwC0IULXbHeGJ8XvULTcqCIdPu4-3D
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.rtems.org/pipermail/devel/attachments/20231224/b558968d/attachment-0001.htm>
More information about the devel
mailing list